进一步阅读 JSON 模板布局文档后,您可以利用
eventTemplateAdditionalField
参数修改事件模板字段。
似乎有几种方法可以解决此问题,但我选择的选项是修改
log4j2.xml
:
<Appenders>
<Console name="JsonAppender" target="SYSTEM_OUT">
<JsonTemplateLayout eventTemplateUri="classpath:LambdaEcsLayout.json">
<EventTemplateAdditionalField
key="message"
format="JSON"
value='{"$resolver": "message", "field": "name"}'/>/>
</JsonTemplateLayout>
</Console>
</Appenders>
登录时,有这样的内容:
var logMap = new HashMap<>();
logMap.put("id", "123456789");
logMap.put("action", "Received request");
var om = new ObjectMessage(logMap);
log.info(om);
可能有一种更简洁的方法来处理后者,某种包装器等 - 但你明白了。
我能够让@Hurricane的方法起作用,但在尝试简化它时,我发现你可以省略
"message": {
"$resolver": "message",
"stringified": false
}
改为模板布局。您还可以省略“stringified”属性,因为它默认为“false”。 OP 不包括布局,但我怀疑他已将“stringified”设置为“true”
我和Alan有同样的问题,有解决办法吗?
嗯,经过审查,这对我不起作用。它对我来说不适用于某些任意对象,例如我得到 "message":{"x":{"a":"b"},"p":"com.xyz.Person@3132fc"} x 是一张地图,很好。 p 是一个 bean,是错误的,但可以使用 jsonLayout 来工作文件。为什么这一切如此困难?这太荒谬了。 – 艾伦·海伊 2023 年 10 月 26 日 16:27