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

相关推荐
希望永不加班2 小时前
SpringBoot 集成测试:@SpringBootTest 与 MockMvc
java·spring boot·后端·log4j·集成测试
uzong2 小时前
软件人员可以关注的 Skill,亲测确实不错,值得试一下
人工智能·后端
掘金虾2 小时前
Hono 框架入门到实战:用 Node.js 写一个支持工具调用的流式对话 Agent
后端
用户8356290780512 小时前
Python 自动拆分 Word 文档教程:按分节符与分页符处理
后端·python
树獭叔叔2 小时前
Claude Code 工具系统深度剖析:从静态注册到动态发现
后端·aigc·openai
树獭叔叔2 小时前
Claude Code 的上下文管理:多层渐进式压缩架构深度解析
后端·aigc·openai
计算机学姐2 小时前
基于SpringBoot的高校竞赛管理系统
java·spring boot·后端·spring·信息可视化·tomcat·mybatis
nghxni2 小时前
LightESB PlatformHttp v1.0.0:DS 数据转换实践
后端
卷毛的小庄2 小时前
被 AI 惯坏后踩的坑:Spring 代理对象 + 反射 = NPE
后端
leo_messi943 小时前
RabbitMq(五) -- SpringBoot整合 RabbitMQ 完整实现
spring boot·rabbitmq·java-rabbitmq