Spring Boot 2.4.6升级2.6.6后报log4j无appenders警告如何解决
问题产生原因
Spring Boot从2.4.x升级到2.6.6版本后,默认的日志依赖路由规则发生变更:
- 2.4.x版本默认内置了log4j 1.x到SLF4J/Log4j2的自动桥接逻辑,即使项目中有第三方组件传递引入log4j 1.x原生依赖,也会自动被桥接包替换,不会触发原生1.x的初始化流程
- 2.6.x版本调整了日志依赖的优先级,当项目中存在log4j 1.x原生依赖时,会优先触发1.x版本的初始化逻辑。你项目中使用的
log4j2.xml是Log4j2专属配置文件,Log4j 1.x无法识别该配置,因此触发无appender的警告,同时日志输出链路被1.x实现截断,导致控制台无正常业务日志打印。
可行解决方案
- 排除残留的log4j 1.x原生依赖
执行mvn dependency:tree查看依赖树,找到所有传递引入log4j:log4j(1.x版本)的依赖项,在对应依赖中添加排除规则,示例配置:<exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> - 引入log4j 1.x到Log4j2的官方桥接包
排除原生1.x依赖后,引入官方桥接依赖,所有原本调用log4j 1.x接口的代码会自动转发到Log4j2实现,不需要修改现有log4j2.xml配置:<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-1.2-api</artifactId> </dependency> - 校验配置文件打包规则
检查maven-resources-plugin等构建插件的配置,确认src/main/resources下的log4j2.xml没有被过滤规则排除,最终构建出的jar包/classes目录下存在该配置文件。如果存在过滤问题,可在pom.xml中明确添加资源包含规则:<build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> <include>**/*.yml</include> </includes> </resource> </resources> </build> - 初始化流程排查
启动应用时添加JVM参数-Dlog4j.debug,控制台会打印日志实现的具体加载过程、配置文件搜索路径,可以快速定位是依赖冲突还是配置文件未加载的问题。
内容的提问来源于stack exchange,提问作者Arunkumar
相关产品推荐
相关产品推荐

