Spring Boot 1.5.4升级至2.0.1遇log4j类缺失错误求助
解决Spring Boot 1.5.4升级到2.0.1时的
java.lang.NoClassDefFoundError: org/apache/log4j/Logger错误 我之前帮同事处理过一模一样的问题,你遇到的这个报错本质是Spring Boot版本升级后日志依赖体系变化导致的兼容性问题,下面给你拆解原因和解决方案:
问题背景
你把Spring Boot应用从1.5.4升级到2.0.1后,原本正常的日志功能抛出了类找不到的错误,已完成的依赖升级包括:
- Spring Boot:1.5.4 → 2.0.1
- Spring Framework:4.3.12 → 5.0.5
- Jackson:2.9.0(版本无变更)
问题根源
Spring Boot 2.x对默认日志依赖做了关键调整:
- 在1.5.x版本中,项目可能通过Spring Boot的日志starter间接依赖了log4j相关的桥接包,或者你的代码隐式依赖了这些包,所以日志功能能正常运行
- 升级到2.0.x后,官方移除了这些默认的log4j绑定依赖,但你的代码仍然直接引用了
org.apache.log4j.Logger类,导致运行时JVM找不到该类
已验证的解决方案
通过手动添加SLF4J与log4j12的绑定依赖,以及SLF4J的API依赖,就能解决这个问题。在你的Maven pom.xml中补充以下依赖:
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.6.4</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.6.4</version> <!-- 建议和slf4j-api版本保持一致,避免版本冲突 --> </dependency>
额外优化提示
- 版本一致性:务必保证
slf4j-api和slf4j-log4j12的版本相同,否则可能引发其他依赖冲突问题 - Gradle用户适配:如果你的项目用Gradle构建,对应的依赖配置如下:
implementation 'org.slf4j:slf4j-api:1.6.4' implementation 'org.slf4j:slf4j-log4j12:1.6.4'
- 长期优化建议:建议逐步将代码中的
org.apache.log4j.Logger替换为SLF4J标准的org.slf4j.Logger,这更符合Spring Boot的日志最佳实践,也能避免后续版本升级时再遇到类似兼容性问题
内容的提问来源于stack exchange,提问作者ritesh kumar
相关产品推荐
相关产品推荐

