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

Spring Boot 1.5.9迁移至2.7.7后Log4j配置被覆盖问题求助

Spring Boot 2.7.7 + Log4j 2.20.0 日志配置异常分析与解决

问题现象

  • 自定义log4j2.xml先被加载,随后被Spring Boot内置的log4j2.xml覆盖,导致自定义配置失效
  • 启动后反复出现ERROR StatusLogger Recursive call to appender Console错误日志

原因分析

  1. Spring Boot日志加载逻辑变更:Spring Boot 2.x版本对日志配置的优先级处理和1.5.x不同,默认会优先加载自身内置的日志配置,可能在自定义配置加载后触发重新配置覆盖
  2. Console Appender循环引用:自定义log4j2.xml中存在Console Appender的递归配置,比如Appender引用自身、Logger与Appender形成循环关联等

解决步骤

1. 强制指定自定义Log4j2配置路径

通过启动参数或配置文件明确指定自定义配置位置,避免Spring Boot内置配置干扰:

  • 启动参数方式:
    java -jar your-app.jar --logging.config=file:/home/vboxuser/Desktop/cande2/cande2-config/log4j2.xml
    
  • application.properties配置:
    logging.config=file:/home/vboxuser/Desktop/cande2/cande2-config/log4j2.xml
    
  • application.yml配置:
    logging:
      config: file:/home/vboxuser/Desktop/cande2/cande2-config/log4j2.xml
    

2. 排查并修复自定义配置的循环引用

检查log4j2.xml中Console Appender的配置,消除递归逻辑:

  • 禁止Appender的ref属性指向自身
  • 避免Logger配置中出现日志输出到Console Appender,同时该Appender又关联回此Logger的情况
  • 示例正确的Console Appender配置:
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
    

3. 排除Spring Boot内置日志自动配置

若上述方法无效,可在启动类中排除Spring Boot的日志自动配置类,彻底避免其干扰:

@SpringBootApplication(exclude = {LoggingApplicationListener.class, Log4J2LoggingSystem.class})
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}

4. 确认依赖配置正确性

确保pom.xml中正确引入Log4j2依赖,并排除Spring Boot默认的Logback依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.20.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.20.0</version>
    </dependency>
</dependencies>

验证方式

启动项目后观察日志:

  • 确认仅加载自定义log4j2.xml,无Spring Boot内置配置加载的日志
  • 检查是否不再出现Recursive call to appender Console错误

内容的提问来源于stack exchange,提问作者Pradeep Reddy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:07:42