如何使用LoggingEventCompositeJsonEncoder输出顶层JSON而非嵌套JSON?
问题
使用LoggingEventCompositeJsonEncoder时,通过如下配置:
<pattern> <pattern>{ "fieldName": "#tryJson{%message}" }</pattern> </pattern>
可生成{ fieldName: [NESTEDJSONHERE] }格式的嵌套JSON。但如何配置才能直接生成顶层JSON?例如希望通过类似如下配置:
<pattern> <pattern>{ #tryJson{%message} }</pattern> </pattern>
生成合法的顶层JSON结构?
解决方案
要直接生成顶层JSON,你需要去掉外层多余的大括号,直接将#tryJson{%message}作为pattern的核心内容,配置示例如下:
<pattern> <pattern>#tryJson{%message}</pattern> </pattern>
关键说明
- 如果你的
%message本身就是完整的合法JSON字符串(比如{"user":"Alice", "action":"login"}),#tryJson会直接将其解析为JSON对象输出,最终结果就是你需要的顶层JSON结构,无需额外嵌套。 - 若
%message不是合法JSON格式,#tryJson会原样输出消息内容,因此要确保日志消息本身符合JSON语法规范,才能得到正确的顶层JSON输出。
内容的提问来源于stack exchange,提问作者Paku
相关产品推荐
相关产品推荐

