欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用SLF4J时的一个错误Failed to load class org.slf4j.impl.StaticLoggerBinder

程序员文章站 2022-07-03 15:38:04
...

问题描述

使用日志一直都是使用了slf4j-apislf4j-log4j12log4j这三个包结合起来使用,新搭建了一个项目,然后创建了一个main方法进行测试运行。然后发现报错了。

Failed to load class org.slf4j.impl.StaticLoggerBinder

解决过程

去SLF4J的官网查询这个错误的原因是什么,得到的结论是:

无法加载类 org.slf4j.impl.StaticLoggerBinder
当无法将类org.slf4j.impl.StaticLoggerBinder加载到内存中时,会报告此警告消息 。如果在类路径上找不到合适的SLF4J绑定,就会发生这种情况。在类路径中放置slf4j-nop.jar slf4j-simple.jar, slf4j-log4j12.jar,slf4j-jdk14.jar或 logback-classic.jar中的一个(并且只有一个)应该可以解决问题。
自1.6.0起SLF4J版本1.6 以来,在没有绑定的情况下,SLF4J将默认为无操作(NOP)记录器实现。
如果您负责打包应用程序并且不关心日志记录,那么将slf4j-nop.jar放在应用程序的类路径中将摆脱此警告消息。请注意,嵌入式组件(如库或框架)不应声明对任何SLF4J绑定的依赖关系,但仅依赖于slf4j-api。当库声明对SLF4J绑定的编译时依赖性时,它会将该绑定强加给最终用户,从而否定SLF4J的目的。

总的来说,就是缺少slf4j-log4j12.jar这个依赖,但是我的是Maven项目,我很确定我已经加入了这个包,但是为什么还是会出错呢。

后来才发现了问题的所在,我的依赖如下所示:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>${slf4j.log4j.version}</version>
    <scope>test</scope>
</dependency>

因为我把范围设置为test,也就是说只有在测试环境下,才可以使用,而我是在main方法中直接运行,所以不属于测试环境,所以这个包相当于就没有加入依赖。后来修改为:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>${slf4j.log4j.version}</version>
    <scope>compile</scope>
</dependency>

这个错误就没有了。

相关标签: SLF4J