这也是我的问题,我想添加我的答案,因为发现其他两个答案不够清楚(尽管完全正确)。
LoggerFactory.bind()
首先,在slf4j-api
(链接)的执行中检查这一行
// the next line does the binding
StaticLoggerBinder.getSingleton();
有一个类叫org.slf4j.impl.StaticLoggerBinder
. 在github上检查它的实现。
现在继续从中央 maven 存储库下载slf4j-api.jar,解压缩并找到StaticLoggerBinder.class
文件。
不要尝试!你不能。事实上,整个org.slf4j.impl
产品已从包装中取出。检查pom.xml
项目的:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>process-classes</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
<configuration>
<tasks>
<echo>Removing slf4j-api's dummy StaticLoggerBinder and StaticMarkerBinder</echo>
<delete dir="target/classes/org/slf4j/impl"/>
</tasks>
</configuration>
</plugin>
最后,检查 SLF4j 的绑定包之一,例如slf4j-simple
. 你能找到org.slf4j.impl.StaticLoggerBinder
课吗?
总之,当您slf4j-api.jar
在运行时环境中拥有一个(并且只有一个)绑定包时,您只有一个org.slf4j.impl.StaticLoggerBinder
执行绑定的类。