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

为何仅需INFO级日志时,DEBUG和TRACE日志仍输出至控制台?

问题原因分析

你遇到的问题核心在于Log4j2的**日志传递性(additivity)**设置。

在你的配置里,<Logger name="org.example" level="ALL" additivity="true"> 中的additivity="true"是关键——这个属性默认是true,意味着当前Logger捕获的所有日志(这里是ALL级别,包含DEBUG、TRACE)会向上传递给父Logger(也就是Root Logger)。

而你的Root Logger配置了Console Appender,虽然Root的级别是INFO,但传递过来的日志不会再被Root的级别过滤(因为子Logger已经完成了级别过滤),所以这些DEBUG、TRACE日志会被Root的Console Appender输出到控制台,导致你看到所有级别日志都出现在控制台。

修复方案

只需要把org.example Logger的additivity属性设置为false,阻止日志向上传递给Root Logger即可:

<Logger name="org.example"  level="ALL" additivity="false">
    <AppenderRef ref="RollingFile"  level="ALL" />
</Logger>
补充说明
  • 当additivity="false"时,org.example Logger的日志只会被配置的RollingFile Appender处理,不会再传递给父Logger;
  • Root Logger会独立处理其他未被子Logger捕获的日志(级别INFO及以上),并输出到Console;
  • 这样就能实现你的需求:控制台仅显示INFO及以上级别,DEBUG/TRACE仅输出到文件。

验证一下修改后的效果:

  • 控制台只会输出INFO : Hello info;
  • 文件里会保留所有级别的日志。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:06:51