Log4j子类日志级别未覆盖根类配置问题求助
问题解决:Log4j子类Logger无法输出Trace级别日志
问题根源
你的配置存在核心错误:未给自定义Logger设置level属性,导致这些Logger默认继承Root Logger的warn级别。Log4j的日志过滤逻辑是:
- 先由Logger自身级别过滤日志,低于该级别的日志直接被丢弃
- 剩余日志才会经过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
相关产品推荐
相关产品推荐

