我将slf4j.simple的依赖版本从1.6.0更改为2.0.0alpha1,并在运行mvn clean install命令时遇到此错误-
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>2.0.0-alpha1</version>
<scope>provided</scope>
</dependency>
堆栈跟踪-
Error during instantiation of the implementation object
java.util.ServiceConfigurationError: org.slf4j.spi.SLF4JServiceProvider: Provider org.slf4j.simple.SimpleServiceProvider not a subtype
at java.util.ServiceLoader.fail(ServiceLoader.java:239)
at java.util.ServiceLoader.access$300(ServiceLoader.java:185)
at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:376)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
at org.slf4j.LoggerFactory.findServiceProviders(LoggerFactory.java:104)
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:147)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:139)
at org.slf4j.LoggerFactory.getProvider(LoggerFactory.java:418)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:404)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:353)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:379)
1条答案
按热度按时间ktca8awb1#
在我的例子中,这个错误是由SLF4J 2.0在ThreadContextClassLoader中搜索
org.slf4j.spi.SLF4JServiceProvider
的示例引起的,ThreadContextClassLoader默认设置为Application类加载器。不幸的是,我的代码实际上是在一个 * 完全独立的 * 类加载器中运行的,它包含自己的slf4j-api
和slf4j-simple
示例。最重要的是,我的隔离类加载器中的
slf4j-api
在Application类加载器中找到了slf4j-simple
,它不能分配给服务接口(即“不是子类型”)。在代码执行
LoggerFactory.getLogger(clazz)
之前,我通过正确设置ThreadContextClassLoader解决了这个问题。不过我个人认为这是SLF4J使用
ServiceLoader
时的一个bug。具体来说,LoggerFactory.findServiceProviders()
应该使用:代替