slf4j 和 log4j2 json 消息转义

问题描述 投票:0回答:1

我使用 slf4j 和 log4j2 作为实现。我希望我的消息(JSON 格式)被记录为 JSON,而不是转义为字符串。

查看

org.apache.logging.log4j.layout.template.json.resolver.MessageResolver
类,我发现如果我删除模板 (
stringified
) 中的
JsonTemplateLayout
标签,它应该可以工作,我就是这么做的。但这不起作用。

在调试代码时,我可以看到我的消息是

MutableLogEvent
(而不是
MultiformatMessage
ObjectMessage
),因此
MessageResolver
回退到转义引号的默认日志记录...

我不确定 log4j 如何确定要使用的消息类型,或者我是否需要以不同的方式进行日志记录,或者配置一些特殊的东西来获得这个...

json log4j log4j2 slf4j
1个回答
0
投票

您使用 SLF4J 作为日志记录 API,与 Log4j Core 的本机 API:Log4j API 相比,它具有更多限制。

特别是 SLF4J 不允许将

Object
记录为消息,您能做的最好的事情就是向其传递格式
String
Object
参数列表。这就是为什么 SLF4J 到 Log4j API 适配器只创建两种消息:某种
ParameterizeMessage
或某种
SimpleMessage

为了将对象传递到 Log4j API,而不对其进行字符串化,您必须直接使用该 API。

备注:由于 Log4j API 几乎是 SLF4J 的严格超集(除了 #1813 中讨论的一些例外),因此如果您使用 Log4j API + Logback 组合,您不会失去任何 Logback 功能。另一方面,SLF4J + Log4j Core 的组合会丢失许多功能。

© www.soinside.com 2019 - 2024. All rights reserved.