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

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

原因分析

  1. 版本兼容性问题:SpringBoot 3.0.x默认依赖SLF4J 2.x版本,而Logback 1.2.x与SLF4J 2.x不兼容(SLF4J 2.x对API做了破坏性变更),导致SLF4J无法识别Logback的LoggerContext,退化为NOPLoggerFactory。
  2. 依赖版本不一致:手动指定的logback-classic:1.2.3和logback-core:1.2.9版本不匹配,加剧类加载冲突。
  3. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 01:45:47