Log4j2使用JsonTemplateLayout的Logstash模板缺失字段如何解决
Log4j2 JSON模板布局缺字段解决方法
你遇到的缺字段问题主要由两个原因导致:一是Log4j2默认关闭了位置信息(行号、调用类/方法名等)的捕获以降低性能开销;二是内置的Logstash模板默认不会输出所有可选字段,需要配合配置启用或自定义模板补充。
具体操作步骤如下:
- 第一步:全局开启位置信息捕获
在你的log4j2.xml的根标签<Configuration>上添加includeLocation="true"属性,示例:
你也可以通过JVM启动参数开启:<Configuration status="WARN" includeLocation="true"> <!-- 其余原有配置 --> </Configuration>-Dlog4j2.enableLocation=true - 第二步:补充JsonTemplateLayout配置开启指定字段输出
若需要输出位置信息、异常栈、MDC上下文等字段,可在布局配置中添加对应参数,示例:<JsonTemplateLayout eventTemplateUri="classpath:LogstashJsonEventLayoutV1.json" locationInfoEnabled="true" stackTraceEnabled="true" mdcEnabled="true" /> - 第三步(可选):自定义模板补充特殊字段
如果内置模板还是不能满足你的字段需求,你可以拷贝官方的Logstash模板到你的类路径下,新增需要的字段配置,比如要固定输出行号可以在模板中添加:
然后将"line_number": {"$resolver": "source", "field": "lineNumber"}eventTemplateUri指向你修改后的自定义模板路径即可。
注意:开启位置信息捕获会带来一定的性能损耗,生产环境如果对日志性能要求极高建议谨慎开启,或者仅在需要排查问题的时段临时开启。
内容的提问来源于stack exchange,提问作者devo
相关产品推荐
相关产品推荐

