You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Log4j2使用JsonTemplateLayout输出日志缺失文件名、行号问题咨询

Log4j2 JsonTemplateLayout不输出文件名、行号问题解决方案

你的JSON模板配置本身没有问题,缺失字段的核心原因是Log4j2默认关闭了日志事件的位置信息(类名、方法名、文件名、行号)收集,避免栈回溯带来的性能损耗,因此模板中的source解析器无法读取到对应字段值。

解决方案

  • 方案1:为指定的JsonTemplateLayout单独开启位置信息
    在你现有的log4j2.properties配置中新增对应布局的配置项:
appender.console.json.locationInfoEnabled = true

如果有其他使用该JSON模板的文件输出appender,需要对应给每个appender的布局都加上相同配置。

  • 方案2:全局开启所有日志事件的位置信息收集
    在log4j2.properties的根配置层级加入以下配置:
log4j2.configuration.includeSource = true
  • 特殊适配:使用异步日志场景
    如果项目中使用了AsyncAppender、AsyncLogger或者全局异步日志,异步组件默认也会关闭位置信息传递,需要额外补充配置:
    1. 单个AsyncLogger配置:新增logger.<自定义logger名称>.includeLocation = true
    2. 全局异步日志:可在启动时添加JVM系统参数 -Dlog4j2.asyncLogger.includeLocation=true,或直接在properties中配置 log4j2.asyncLogger.includeLocation = true

注意事项

开启位置信息需要执行栈回溯操作,会产生一定的性能损耗,对日志吞吐量要求极高的生产环境可按需评估开启范围,优先选择仅给需要的appender单独开启的方案。


内容的提问来源于stack exchange,提问作者Stealth Rabbi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 23:24:01