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

问题描述

使用日志一直都是使用了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.slf4jgroupId>
    <artifactId>slf4j-log4j12artifactId>
    <version>${slf4j.log4j.version}version>
    <scope>testscope>
dependency>

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

<dependency>
    <groupId>org.slf4jgroupId>
    <artifactId>slf4j-log4j12artifactId>
    <version>${slf4j.log4j.version}version>
    <scope>compilescope>
dependency>

这个错误就没有了。

你可能感兴趣的:(SLF4J)