Spring Boot切换SLF4J后Tomcat启动日志红色显示问题排查
Tomcat INFO日志在控制台显示为红色的原因及解决办法
问题根源
- Tomcat日志未接入SLF4J:Tomcat内部默认使用Java Util Logging(JUL)输出日志,你切换到SLF4J/Logback后,未配置JUL到SLF4J的桥接,导致这些日志绕过Logback的配置,直接走JUL的默认输出。JUL会将部分INFO级日志输出到
System.err,IDE识别该流内容为错误,因此显示红色。 - Logback未配置控制台输出:你的
logback.xml仅配置了文件日志的滚动Appender,未添加控制台Appender,Spring Boot会启用默认控制台配置,但该配置无法管控Tomcat的JUL日志,导致日志流向错误的输出流。 - 日志级别配置冲突:
application.properties中设置了logging.level.org.apache=DEBUG,但Logback的root级别为ERROR,且未单独为org.apache配置Logger,Tomcat的日志无法被Logback过滤,只能以默认方式输出。
解决步骤
1. 添加JUL转SLF4J的桥接依赖
如果使用Maven,在pom.xml中添加:
<dependency> <groupId>org.slf4j</groupId> <artifactId>jul-to-slf4j</artifactId> </dependency>
如果使用Gradle,在build.gradle中添加:
implementation 'org.slf4j:jul-to-slf4j'
然后在Spring Boot启动类中初始化桥接:
import org.slf4j.bridge.SLF4JBridgeHandler; import java.util.logging.LogManager; @SpringBootApplication public class YourApplication { static { // 重置JUL日志管理器,避免冲突 LogManager.getLogManager().reset(); // 安装桥接,将JUL日志转接到SLF4J SLF4JBridgeHandler.install(); } public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
2. 完善Logback配置,添加控制台Appender
修改logback.xml,新增控制台输出Appender,并为Tomcat相关日志单独配置路由:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <property name="HOME_LOG" value="logs/app.log"/> <!-- 控制台输出Appender,指定输出到System.out,避免红色显示 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n</pattern> </encoder> <target>System.out</target> </appender> <!-- 原有的文件滚动Appender --> <appender name="FILE-ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${HOME_LOG}</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>logs/archived/app.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <maxFileSize>10MB</maxFileSize> <totalSizeCap>20GB</totalSizeCap> <maxHistory>60</maxHistory> </rollingPolicy> <encoder> <pattern>%d %p %c{1.} [%t] %m%n</pattern> </encoder> </appender> <!-- 业务日志配置 --> <logger name="com.avem" level="debug" additivity="false"> <appender-ref ref="FILE-ROLLING"/> <appender-ref ref="CONSOLE"/> </logger> <!-- Tomcat相关日志配置,设置为INFO级别 --> <logger name="org.apache" level="INFO" additivity="false"> <appender-ref ref="CONSOLE"/> <appender-ref ref="FILE-ROLLING"/> </logger> <!-- Spring框架日志配置 --> <logger name="org.springframework" level="ERROR" additivity="false"> <appender-ref ref="CONSOLE"/> <appender-ref ref="FILE-ROLLING"/> </logger> <!-- 根日志配置 --> <root level="ERROR"> <appender-ref ref="FILE-ROLLING"/> <appender-ref ref="CONSOLE"/> </root> </configuration>
3. 清理重复配置
删除application.properties中与Logback重复的配置,仅保留必要项:
server.servlet.context-path=/svs/v1 server.address=127.0.0.1 server.port=8081 logging.config=classpath:logback.xml
内容的提问来源于stack exchange,提问作者Bastien
相关产品推荐
相关产品推荐

