You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot切换SLF4J后Tomcat启动日志红色显示问题排查

Tomcat INFO日志在控制台显示为红色的原因及解决办法

问题根源

  1. Tomcat日志未接入SLF4J:Tomcat内部默认使用Java Util Logging(JUL)输出日志,你切换到SLF4J/Logback后,未配置JUL到SLF4J的桥接,导致这些日志绕过Logback的配置,直接走JUL的默认输出。JUL会将部分INFO级日志输出到System.err,IDE识别该流内容为错误,因此显示红色。
  2. Logback未配置控制台输出:你的logback.xml仅配置了文件日志的滚动Appender,未添加控制台Appender,Spring Boot会启用默认控制台配置,但该配置无法管控Tomcat的JUL日志,导致日志流向错误的输出流。
  3. 日志级别配置冲突: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 23:48:24