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

相关推荐
光依旧3 小时前
MCP实战手记系列(十):MCP Server高可用实战
spring boot·高可用·nginx负载均衡·redis哨兵·mcp·微服务容错·resilience4j熔断
回眸&啤酒鸭4 小时前
【回眸】自动化白盒测试落地实战指南
运维·自动化·log4j
刚子编程5 小时前
我用 ASP.NET Core 做了个水稻病虫害检查系统
后端·asp.net
谢亮_vipxieliang5 小时前
用 PHP 构建轻量级 REST API:从路由到鉴权的完整实践
开发语言·后端·php
省钱兄--zs6 小时前
西安24小时自助健身房解决方案实战:系统开发与部署全流程指南
java·spring boot·系统架构·intellij-idea·需求分析
码事漫谈8 小时前
三步改掉 AI 味,附可直接复制的去 AI 味提示词
后端
IT_陈寒8 小时前
Redis卡顿的锅,这次真不是大key的错
前端·人工智能·后端
可乐鸡翅yeah_8 小时前
video.js 集成 hls.js 开发 M3U8 播放器,新手高频踩坑
开发语言·前端·javascript·后端·ecmascript·m3u8·音视频在线播放
ly76898 小时前
Spring Boot 集成 Elasticsearch 的生产实践:客户端选型、索引生命周期与批量写入容错
spring boot·elasticsearch·索引生命周期·java api client·批量写入