Log4j2(和SLF4j 2.0.0-alpha1)和JsonTemplateLayout——如何将消息序列化为JSO



我正在探索Log4j 2.14.0和SLF4j 2.0,并尝试生成结构化消息。

我已经用稍微修改过的LogstashJsonEventLayoutV1.json,设置了Appender

<JsonTemplateLayout eventTemplateUri="classpath:LogstashJsonEventLayoutV1-test.json" properties="true" />

其中我删除了时间戳和主机名(我这样做是作为单元测试的一部分(,并修改了";消息";像这样:

"message": {
"$resolver": "message",
"fallbackKey": "formattedMessage"}

当我记录时

log4jLogger.atInfo().log(new MapMessage(Map.of("hello", "world")));

很明显,它正在生成JSONified日志消息:

{"@version":1,"message":{"hello":"world"},"thread_name":"Test worker","level":"INFO","logger_name":"java.lang.Integer"}

在生产中,我的商店通常通过SLF4J使用Log4J。我愿意使用SLF4J 2.0.0-alpha1版本来实现这个目标。我如何通过SLF4J流畅的API通过addKeyValue实现同样的事情?

logger.atDebug().addKeyValue("oldT", oldT).addKeyValue("newT", newT).log("Temperature changed.");

一天结束时,我刚刚包装了log4j——对于这个用例,当我只能以log4j为目标时,包装Slf4j没有任何意义。

最新更新