Spring Boot 1.5.9无法识别Log4j2依赖仍查找Logback求助
Spring Boot 1.5.9 切换Log4j2时Logback类找不到的问题解决
你遇到的这个问题我太熟悉了——明明在Maven里排除了spring-boot-starter-logging,也引入了spring-boot-starter-log4j2,甚至依赖树里已经看不到Logback的影子,启动时还是抛出:
Exception in thread "main" java.lang.NoClassDefFoundError: ch/qos/logback/classic/turbo/TurboFilter
这是因为Spring Boot 1.5.x版本的日志系统自动探测逻辑有点“顽固”,哪怕依赖被移除,初始化时还是会尝试加载Logback相关类。给你几个亲测有效的解决步骤:
1. 强制指定使用Log4j2 LoggingSystem
这是最直接的解决办法,跳过Spring Boot的自动探测逻辑,直接告诉它用Log4j2的日志系统:
- 方式一:通过配置文件指定
在application.properties里添加:
spring.logging.system=org.springframework.boot.logging.log4j2.Log4j2LoggingSystem
或者在application.yml里:
spring: logging: system: org.springframework.boot.logging.log4j2.Log4j2LoggingSystem
- 方式二:启动时通过系统属性指定
如果配置文件还没来得及加载就触发了日志初始化(比如你的启动类用了自定义SpringApplicationBuilder),可以在main方法里先设置系统属性:
public static void main(String[] args) { System.setProperty("spring.logging.system", "org.springframework.boot.logging.log4j2.Log4j2LoggingSystem"); new SpringApplicationBuilder(Test.class).run(args); }
2. 再次确认是否完全排除Logback依赖
虽然你说依赖树里看不到,但可以用Maven命令再精准排查一遍:
mvn dependency:tree -Dincludes=ch.qos.logback
如果输出里还有Logback的依赖,找到对应的父依赖,在它的<exclusions>里加上Logback的排除配置,确保彻底移除。
3. 清理缓存避免旧依赖干扰
有时候Maven或IDE的缓存会残留旧依赖,导致问题:
- 执行Maven命令清理并重新构建:
mvn clean install -U
- 在IDE里(比如IntelliJ IDEA/Eclipse)清理缓存并重启,确保加载的是最新的依赖。
补充说明
Spring Boot 1.5.x属于比较老的版本,日志系统的自动适配逻辑不如2.x版本完善,所以强制指定LoggingSystem是解决这类问题的关键。
内容的提问来源于stack exchange,提问作者mann
相关产品推荐
相关产品推荐

