我有这个 log4j2.xml
文件:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="JsonAppender" target="SYSTEM_OUT">
<JsonTemplateLayout eventTemplateUri="classpath:EcsLayout.json" />
</Console>
</Appenders>
<Loggers>
<Logger name="JsonLogger" level="INFO" additivity="false">
<AppenderRef ref="JsonAppender"/>
</Logger>
<Root level="info">
<AppenderRef ref="JsonAppender"/>
</Root>
</Loggers>
</Configuration>
在我的代码中,我有一个类似的日志记录语句:
HashMap logMap = new HashMap<>();
logMap.put("appId", "123456789");
logMap.put("action", "Received request");
logger.info(new ObjectMessage(logMap));
在我的日志中,我得到了以下信息:
{
"@timestamp": "2022-02-02T10:52:56.100Z",
"ecs.version": "1.2.0",
"log.level": "INFO",
"message": "{appId=123456789, action=Received request}",
"process.thread.name": "main",
"log.logger": "org.xxxx.App"
}
好的,但我希望 message
以 json 格式呈现,所以想要:
"message": {
"appId": "123456789",
"action": "Received request"
}
我知道使用 JsonLayout
时必须指定 objectMessageAsJsonObject="true"
,但是在使用 JsonTemplateLayout
时可能会更加微妙。
TIA.
"message":{"x":{"a":"b"},"p":"com.xyz.Person@3132fc"}
x是一个映射,没问题。p是一个bean,是错误的,但使用jsonLayout却可以正常工作。为什么这一切都这么难?太荒谬了。 - undefined