问题
最近在了解AI相关知识,搭了Spring Boot项目学习一下。在启动时报了一个SLF4J的警告,项目可以正常启动;之前有个项目也遇到过,当时工期紧没来的及细究。具体报错如下:
SLF4J(W): Class path contains multiple SLF4J providers.
SLF4J(W): Found provider [ch.qos.logback.classic.spi.LogbackServiceProvider@78a2da20]
SLF4J(W): Found provider [org.slf4j.simple.SimpleServiceProvider@dd3b207]
SLF4J(W): See https://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J(I): Actual provider is of type [ch.qos.logback.classic.spi.LogbackServiceProvider@78a2da20]
这个警告信息表明类路径中包含了多个SLF4J的提供者,应该是Maven依赖的jar中存在冲突了。
那么就先看下两个Provider归属的jar,直接在idea中搜就行;
ch.qos.logback.classic.spi.LogbackServiceProvider类是logback-classic-1.4.14.jar中的;
org.slf4j.simple.SimpleServiceProvider类是slf4j-simple-2.0.13.jar中的;
logback 和 slf4j-simple 都是用于日志记录的库,它们都是SLF4J(Simple Logging Facade for Java)的实现,但它们在功能和配置上有所不同。
Maven依赖关系如下:
logback是spring boot官方集成的日志框架;
slf4j-simple是alibaba-ai集成的;
解决
解决就很简单啦,我这里选择将日志框架slf4j-simple排除掉,Maven -> Reload Peoject,搞定~!
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-ai</artifactId>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
</exclusion>
</exclusions>
</dependency>
如果遇到其它的日志框架冲突,解决也是一样的;
补充
简单补充下概念:SLF4J(Simple Logging Facade for Java)是一个Java日志门面框架,提供统一的日志接口,使开发人员能够在不同的日志实现(如Logback、Log4j等)之间无缝切换,简化了日志记录的过程。与其它实现的关系是,SLF4J本身不提供实际的日志记录功能,而是作为一个日志门面,通过与各种日志实现进行交互,使得开发人员能够灵活选择最适合项目需求的日志实现。
具体的Java日志框架发展流程,以及Logback和Log4j、Log4j2的相爱相杀,就不在这补充啦。我记得有一篇博客讲的很好,链接忘了,哈哈哈哈哈哈