Java Logback日志级别设为ERROR仍输出INFO/WARN/DEBUG日志问题
问题原因
- 核心原因:配置的
MarkerFilter优先级高于日志级别校验规则。TurboFilter是Logback的全局前置过滤器,会在日志级别判断之前执行,当前配置中匹配TraceMarker的日志会被直接ACCEPT,跳过后续的级别校验逻辑,无论全局或指定包配置的日志级别是什么都会输出。从配置的日志输出格式中包含[%marker]也可验证该点,所有超出级别限制的日志都会携带TraceMarker标识。 - 次要排查点:若排除Marker相关问题,需确认SpringBoot配置文件(application.yml/application.properties)中是否配置了
logging.level相关规则,SpringBoot配置的日志级别优先级高于自定义logback配置文件中的规则,会覆盖logback.xml中的级别设置。
解决方案
MarkerFilter逻辑调整
将TurboFilter的OnMatch行为从ACCEPT修改为NEUTRAL,匹配到TraceMarker的日志会继续执行后续的级别校验流程,只有符合ERROR级别要求的日志才会输出:
<turboFilter class="ch.qos.logback.classic.turbo.MarkerFilter"> <Marker>TraceMarker</Marker> <OnMatch>NEUTRAL</OnMatch> <OnMismatch>NEUTRAL</OnMismatch> </turboFilter>
如果业务确实需要保留TraceMarker日志不限制级别输出的逻辑,可单独调整该过滤器的匹配规则,无需修改通用级别配置。
SpringBoot配置覆盖处理
检查application.yml或application.properties中是否存在如下类似配置,删除或调整为所需的ERROR级别即可:
logging: level: root: INFO com.xyz.service: INFO
内容的提问来源于stack exchange,提问作者Apsar
相关产品推荐
相关产品推荐

