Spring Boot测试启动失败:SLF4J日志多实现冲突解决方案

在开发 Spring Boot +LangGraph4J项目时,打算利用阿里云百炼的文生图模型生成Logo图片,在引入了阿里云百炼 SDK(dashscope-sdk-java)后,执行单元测试(LogoGeneratorToolTest)时,项目直接启动失败,控制台打印大量报错日志:

bash 复制代码
SLF4J(W): Class path contains multiple SLF4J providers.
SLF4J(W): Found provider [org.slf4j.simple.SimpleServiceProvider@206a70ef]
SLF4J(W): Found provider [ch.qos.logback.classic.spi.LogbackServiceProvider@292b08d6]
...
Caused by: java.lang.IllegalStateException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation (class org.slf4j.simple.SimpleLoggerFactory loaded from .../slf4j-simple-2.0.17.jar)

原因分析

SLF4J(Simple Logging Facade for Java)是日志门面接口,本身不实现日志打印功能,需要绑定一个具体的日志实现组件(如Logback、Log4j、SLF4J-Simple等)。

其中,Logback是由spring-boot-starter-logging自动引入,Spring Boot官方推荐的日志组件,支持日志配置、文件滚动、异步打印等企业级特性。

而SLF4J-Simple是由阿里通义SDK(dashscope-sdk-java)依赖传递引入,是一个轻量但功能简单的日志实现。

由于在这个项目类路径下同时存在两个SLF4J的实现组件,违反了"一个日志门面+一个实现"的规范,导致Spring容器启动时无法确定使用哪个日志工厂,最终加载应用上下文失败。

解决方案

保留Logback,排除冲突的SLF4J-Simple依赖,修改pom.xml,排除冲突依赖,通过标签排除其中的slf4j-simple依赖,具体配置如下:

bash 复制代码
<!-- 阿里通义SDK依赖 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dashscope-sdk-java</artifactId>
    <version>2.21.1</version>
    <!-- 排除冲突的slf4j-simple依赖 -->
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
        </exclusion>
    </exclusions>
</dependency>

接下来,打开Maven面板➡️ 右键项目➡️选择"Reload Project",等待依赖刷新完成,重新运行之前失败的单元测试,日志冲突问题解决。

相关推荐
卓怡学长14 小时前
w255基于springboot仓库管理系统
java·数据库·spring boot·spring·intellij-idea
谭光志15 小时前
Vibe Coding 时代,程序员该何去何从
前端·后端·ai编程
GoGeekBaird16 小时前
我用 BeeWeave 跑完了一次完整写作闭环
后端·github
仿生狮子17 小时前
别再说“全栈”了,AI 时代团队只认这 5 种人
前端·人工智能·后端
csdn2015_17 小时前
springboot读取配置的方法
java·spring boot·spring
Reart20 小时前
Leetcode 213.打家劫舍2(内含闲谈,打劫真是技术活,好题,716)
后端·算法
触底反弹20 小时前
🔥 RAG 到底是怎么工作的?掰开揉碎了给你讲明白!
javascript·人工智能·后端
techdashen20 小时前
Go 1.26 新增 `bytes.Buffer.Peek`:只看数据,不移动读取位置
开发语言·后端·golang
Reart20 小时前
Leetcode 198.打家劫舍(716)
后端·算法
Flittly21 小时前
【AgentScope Java新手村系列】(19)多模态-图像音频视频
java·spring boot·spring