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",等待依赖刷新完成,重新运行之前失败的单元测试,日志冲突问题解决。

相关推荐
陈随易1 小时前
Postman 被曝自动往 Claude Code 和 Codex 装插件
前端·后端·程序员
云-缩影3 小时前
拆解 AI 图像生成应用的后端架构:ECS、OSS 和大模型 API 怎么配合
java·spring boot·后端
考虑考虑4 小时前
Posrgresql恢复.backup文件
数据库·后端·postgresql
无奈何杨4 小时前
风控决策系统决策流,策略模式,权重、顺序、投票、最坏
后端
AI开源软件5 小时前
SpringBoot3+Vue3 财务管理系统如何设计:从业务单据到总账的模块划分
spring boot·vue3·领域建模·会计凭证·ruoyi office·业财协同·财务系统设计
Patrick_Wilson6 小时前
Go 为什么需要 defer?从函数怎么收尾说起
后端·go·编程语言
苏三说技术6 小时前
DeepSeek Harness入驻B站,评论区被干成了大型插件集市!
后端
橙序员小站6 小时前
我一句话让 AI 把公众号工作台搭完了:部署实测记录
后端
Patrick_Wilson6 小时前
从文本输出理解 Go 方法与接口
后端·go·编程语言
QCoding7 小时前
企业级Agent Evaluation实战:Agent能跑就能上线?AI Agent到底怎么测?
后端·spring