Log4j2(和 SLF4j 2.0.0-alpha1)和 JsonTemplateLayout——如何将消息序列化为 JSON
Log4j2 (and SLF4j 2.0.0-alpha1) and JsonTemplateLayout--how to serialize Messages as JSON
我正在探索 Log4j 2.14.0 和 SLF4j 2.0 并尝试生成结构化消息。
我的 Appender 设置稍作修改 LogstashJsonEventLayoutV1.json,
<JsonTemplateLayout eventTemplateUri="classpath:LogstashJsonEventLayoutV1-test.json" properties="true" />
我删除了时间戳和主机名(我这样做是作为单元测试的一部分)并修改了“消息”的配置,如下所示:
"message": {
"$resolver": "message",
"fallbackKey": "formattedMessage"}
当我记录一些东西时
log4jLogger.atInfo().log(new MapMessage(Map.of("hello", "world")));
它显然正在生成 JSON 化的日志消息:
{"@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。
我正在探索 Log4j 2.14.0 和 SLF4j 2.0 并尝试生成结构化消息。
我的 Appender 设置稍作修改 LogstashJsonEventLayoutV1.json,
<JsonTemplateLayout eventTemplateUri="classpath:LogstashJsonEventLayoutV1-test.json" properties="true" />
我删除了时间戳和主机名(我这样做是作为单元测试的一部分)并修改了“消息”的配置,如下所示:
"message": {
"$resolver": "message",
"fallbackKey": "formattedMessage"}
当我记录一些东西时
log4jLogger.atInfo().log(new MapMessage(Map.of("hello", "world")));
它显然正在生成 JSON 化的日志消息:
{"@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。