SpringBoot 3.0.2+Java17日志冲突:LoggerFactory非Logback上下文报错
问题解决:SpringBoot 3.0.2 + Java17 日志依赖冲突导致测试失败
环境与依赖配置
使用SpringBoot版本 3.0.2、Java 17,刚完成版本升级,build.gradle中日志相关依赖配置如下:
implementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3' implementation (group: 'ch.qos.logback.contrib', name: 'logback-json-classic', version: '0.1.5'){ exclude group: 'org.json', module: 'json' } implementation (group: 'ch.qos.logback.contrib', name: 'logback-jackson', version: '0.1.5'){ exclude group: 'org.json', module: 'json' } implementation group: 'ch.qos.logback', name: 'logback-core', version: '1.2.9'
报错信息
执行 ./gradlew clean build 时测试失败,核心报错:
Caused by: java.lang.IllegalArgumentException: LoggerFactory 不是Logback LoggerContext,但Logback已在类路径中。请移除Logback或冲突的实现(加载自 slf4j-api-2.0.6.jar 的 org.slf4j.helpers.NOPLoggerFactory)。如果使用WebLogic,需要在WEB-INF/weblogic.xml的prefer-application-packages中添加'org.slf4j'。
测试用例失败栈:
StudentIntegrationTest > createStudent() FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:142 Caused by: java.lang.IllegalArgumentException at Assert.java:713
原因分析
- 版本兼容性问题:SpringBoot 3.0.x默认依赖SLF4J 2.x版本,而Logback 1.2.x与SLF4J 2.x不兼容(SLF4J 2.x对API做了破坏性变更),导致SLF4J无法识别Logback的LoggerContext,退化为NOPLoggerFactory。
- 依赖版本不一致:手动指定的
logback-classic:1.2.3和logback-core:1.2.9版本不匹配,加剧类加载冲突。 - logback-contrib版本过旧:
logback-contrib:0.1.5依赖旧版Logback,未适配SLF4J 2.x,进一步引发依赖冲突。
解决方案
方案1:依赖SpringBoot自动管理日志版本
SpringBoot的父依赖已经内置了兼容的Logback和SLF4J版本,移除手动指定的Logback核心依赖,避免版本冲突:
// 移除手动指定的logback-classic和logback-core,由SpringBoot依赖管理自动引入 implementation (group: 'ch.qos.logback.contrib', name: 'logback-json-classic', version: '0.1.5'){ exclude group: 'org.json', module: 'json' exclude group: 'ch.qos.logback', module: 'logback-classic' // 排除contrib自带的旧版Logback } implementation (group: 'ch.qos.logback.contrib', name: 'logback-jackson', version: '0.1.5'){ exclude group: 'org.json', module: 'json' exclude group: 'ch.qos.logback', module: 'logback-classic' // 排除旧版依赖 }
方案2:升级logback-contrib至兼容版本(可选)
如果需要保留logback-contrib功能,建议升级到支持SLF4J 2.x的版本(目前官方最新版为0.1.6,需自行验证兼容性),或替换为SpringBoot推荐的JSON日志方案(如直接在logback配置中集成Jackson)。
验证依赖
执行以下命令检查依赖树,确保只有SpringBoot管理的Logback版本,无其他SLF4J实现冲突:
./gradlew dependencies
内容的提问来源于stack exchange,提问作者MA-Dev
相关产品推荐
相关产品推荐

