Logback配置仅输出ERROR到catalina.out却出现DEBUG日志的问题
问题分析
你遇到的核心问题是混淆了自己配置的Logback输出文件与Tomcat原生的catalina.out:
- 你的Logback配置中,
FILE-CATALINA追加器输出到${DEV_HOME}/catalina.out(即应用目录下的./logs/catalina.out); - 而你看到DEBUG日志的是Tomcat安装目录下的
{server}/logs/tomcat/catalina.out,这个文件是Tomcat用来捕获JVM标准输出(stdout)和标准错误(stderr)的默认文件。
出现DEBUG日志的原因:你的Logback配置中存在STDOUT控制台追加器,且配置了多个<root>节点,Logback只会生效最后一个,导致前面关联FILE-CATALINA的Root配置被覆盖,部分日志(包括Activiti的DEBUG日志)被输出到stdout,进而被Tomcat捕获并写入它的catalina.out。
解决方案
1. 清理重复的Root日志配置
Logback中仅能有一个有效的<root>节点,多余的会被忽略。删除配置中指向CONSOLE和STDOUT的<root>节点,仅保留关联FILE-CATALINA的配置:
<root level="ERROR"> <appender-ref ref="FILE-CATALINA" /> </root>
2. 确保Activiti日志级别被正确限制
检查当前运行环境的日志配置:
- 如果是开发环境:恢复
<springProfile name="dev">的注释(之前你把注释打开了,导致配置直接生效),确认org.activiti的日志级别为ERROR,且没有其他配置(如application.properties中的logging.level.org.activiti=DEBUG)覆盖该设置; - 如果是生产环境:确保
spring.profiles.active=prod,此时org.activiti的日志级别为WARN且additivity=false,不会将日志传递到Root节点。
3. 阻止Tomcat捕获应用stdout(可选)
如果不需要Tomcat的catalina.out记录应用日志,可修改Tomcat的conf/logging.properties:
- 将
java.util.logging.ConsoleHandler.level设为SEVERE(对应Logback的ERROR级别); - 或修改Tomcat启动脚本,移除将stdout/stderr重定向到
catalina.out的逻辑。
修正后的关键配置片段
<configuration> <!-- 其他原有配置保持不变 --> <!-- 仅保留这一个Root节点 --> <root level="ERROR"> <appender-ref ref="FILE-CATALINA" /> </root> <!-- 恢复开发环境的Profile注释 --> <springProfile name="dev"> <logger name="com.keuroa.em" level="error" additivity="true"> <appender-ref ref="FILE-AUDIT" /> </logger> <logger name="org.springframework" level="error" additivity="true"> <appender-ref ref="FILE-AUDITSPRING" /> </logger> <logger name="org.activiti" level="error" additivity="true"> <appender-ref ref="FILE-AUDIT-WF" /> </logger> <logger name="org.activiti5" level="error" additivity="true"> <appender-ref ref="FILE-AUDIT-WF" /> </logger> </springProfile> <!-- 生产环境配置保持不变 --> <springProfile name="prod"> <logger name="com.keuroa.em" level="WARN" additivity="false"> <appender-ref ref="FILE-AUDIT" /> </logger> <logger name="org.springframework" level="WARN" additivity="false"> <appender-ref ref="FILE-AUDITSPRING" /> </logger> <logger name="org.activiti" level="WARN" additivity="false"> <appender-ref ref="FILE-AUDIT-WF" /> </logger> <logger name="org.activiti5" level="WARN" additivity="false"> <appender-ref ref="FILE-AUDIT-WF" /> </logger> </springProfile> <!-- 其他原有配置保持不变 --> </configuration>
内容的提问来源于stack exchange,提问作者Nunyet Calçada
相关产品推荐
相关产品推荐

