我正在探索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没有任何意义。