同一包基于Appender类型设置不同日志级别问题求助
问题分析与解决方案
你的配置存在两个核心问题:
- 重复定义了同名的
com.trenolab.treno4.railmlLogger,Logback中重复定义会导致配置逻辑冲突; - 文件Appender没有设置级别过滤,即便Logger级别设为WARN,仍会有不符合级别的日志流入文件。
以下是修正后的完整配置:
<configuration> <appender name="my_file_appender" class="ch.qos.logback.core.FileAppender"> <file>myLog.log</file> <encoder> <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern> </encoder> <!-- 添加级别过滤器,仅保留WARN及以上级别日志写入文件 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>WARN</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 全局Root Logger,处理所有包的INFO级别日志到控制台 --> <root level="INFO"> <appender-ref ref="STDOUT"/> </root> <!-- 针对指定包的Logger配置 --> <logger name="com.trenolab.treno4.railml" level="INFO" additivity="true"> <!-- 将该包的日志关联到文件Appender(受过滤器限制仅写入WARN+) --> <appender-ref ref="my_file_appender" /> </logger> </configuration>
关键修改说明:
- 移除重复Logger:删掉原配置中第二个
com.trenolab.treno4.railmlLogger定义,避免逻辑冲突; - 文件Appender添加过滤器:通过
LevelFilter明确只允许WARN及以上级别的日志写入文件,从根源上拦截INFO级别日志; - 统一Logger级别:指定包的Logger级别设为
INFO,同时保持additivity="true"(默认值,可省略),确保该包的INFO日志能向上传递到Root Logger,从而通过STDOUT输出到控制台。
内容的提问来源于stack exchange,提问作者matteo88
相关产品推荐
相关产品推荐

