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

Spring Boot应用控制台日志格式不一致的原因及配置排查

日志出现两种格式的原因及配置问题排查

核心原因:SLF4J日志绑定冲突

你的父POM里同时加了slf4j-simple和log4j-slf4j-impl,这俩都是SLF4J的具体日志实现绑定。SLF4J作为日志门面,同一时间只能生效一个绑定实现,多个绑定共存时,类加载机制会随机选一个,但不同组件可能触发不同的绑定加载,最终导致日志输出格式乱掉。

另外子POM里排除了spring-boot-starter-logging,而Spring Boot默认用的是Logback(就包含在这个starter里),这进一步打乱了日志依赖的统一性,部分框架组件可能会 fallback 到其他绑定,格式混乱问题更严重。

具体配置问题

  • 父POM同时引入多个SLF4J绑定:slf4j-simple和log4j-slf4j-impl共存,违反了SLF4J只能用单一绑定的原则
  • 子POM没必要排除Spring Boot默认日志starter:spring-boot-starter-logging是Spring Boot日志体系的基础,排除后默认日志配置失效,组件只能用其他绑定的默认格式
  • 缺少统一日志配置文件:没明确指定日志格式的配置文件(比如logback.xml、log4j2.xml),不同绑定会用各自的默认输出格式

修复方案

  1. 清理冗余日志绑定:父POM里只留一个SLF4J绑定,推荐二选一:

    • 想用Log4j2就保留log4j-slf4j-impl,删掉slf4j-simple
    • 想用Spring Boot默认的Logback,就删掉slf4j-simple和log4j-slf4j-impl,只留slf4j-api就行
      修改后的父POM日志依赖示例:
    <dependencies>
        <!-- Lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!-- Loggers -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>
        <!-- 二选一:保留Log4j2绑定 -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
        </dependency>
    </dependencies>
    
  2. 恢复Spring Boot默认日志依赖:子POM里删掉对spring-boot-starter-logging的排除配置,让Spring Boot的日志自动配置生效:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
        <!-- 移除这段排除代码 -->
        <!-- <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions> -->
    </dependency>
    
  3. 添加统一日志配置文件:根据选的日志实现,在src/main/resources目录加对应的配置文件,比如用Logback就加logback-spring.xml,定义统一输出格式:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
        <root level="info">
            <appender-ref ref="CONSOLE"/>
        </root>
    </configuration>
    

内容的提问来源于stack exchange,提问作者Paul Marcelin Bejan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:24:52