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

Log4j子类日志级别未覆盖根类配置问题求助

问题解决:Log4j子类Logger无法输出Trace级别日志

问题根源

你的配置存在核心错误:未给自定义Logger设置level属性,导致这些Logger默认继承Root Logger的warn级别。Log4j的日志过滤逻辑是:

  1. 先由Logger自身级别过滤日志,低于该级别的日志直接被丢弃
  2. 剩余日志才会经过AppenderRef的二次级别过滤

所以即便你在AppenderRef里设了trace,Logger本身已经把trace/debug/info级别的日志过滤掉了,根本到不了Appender环节。

修复方案

给两个自定义Logger添加level="trace"属性,同时可按需设置additivity="false"(避免日志重复输出到Root的Appender):

<?xml version="1.0" encoding="UTF-8"?>

<Configuration status="warn"  monitorInterval="30">
    <Appenders>
        <Console name="StdOut" target="SYSTEM_OUT">
            <PatternLayout pattern="[%level] %msg%n" />
        </Console>
        
        <File name="FileAppender" filename="LogOutput.log">
            <PatternLayout
                pattern="%d{dd MMM yyyy HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" />
        </File>
    </Appenders>
    <Loggers>   
        <Root level="warn">
            <AppenderRef ref="FileAppender" />
        </Root>
        
        <Logger name="com.fdmgroup.logging.Demo" level="trace" additivity="false">
            <AppenderRef ref="StdOut"/>
        </Logger> 
        
        <Logger name="com.fdmgroup.exercise.Runner" level="trace" additivity="false">
            <AppenderRef ref="StdOut"/>
            <AppenderRef ref="FileAppender"/>
        </Logger> 
    </Loggers>  
</Configuration>

关键说明

  • level="trace":让Logger自身允许处理trace及以上级别的日志
  • additivity="false":阻止日志传递到父Logger(含Root),避免同一日志重复输出到多个Appender
  • 若保留默认的additivity="true",com.fdmgroup.exercise.Runner的warn及以上日志会同时输出到自身和Root的FileAppender,造成重复

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:35:30