SLF4j 报错:Failed to load class org.slf4j.impl.StaticLoggerBinder

2025-01-24T10:11:09

在运行资方的 sdk demo 时,SLF4j 报错:Failed to load class org.slf4j.impl.StaticLoggerBinder

idea 提示了一个报错链接说明:无法加载类 org.slf4j.impl.StaticLoggerBinder,里面提到:

org.slf4j.impl.StaticLoggerBinder当无法将类加载到内存中时,slf4j-api 版本 1.7.x 及更早版本会报告此警告消息 。当在类路径上找不到合适的 SLF4J 绑定时,就会发生这种情况。将slf4j-nop.jar slf4j-simple.jar、 slf4j-log4j12.jar、slf4j-jdk14.jar或 logback-classic.jar中的一个(且只能一个)放在类路径上应该可以解决问题。

如果您看到此消息,则说明您使用的不是slf4j-api 版本 2.0 或更高版本,而是 slf4j-api 版本 1.7.x 或更早版本。Slf4j-api 版本 2.0.x 及更高版本使用ServiceLoader 机制。以 slf4j-api 2.x 为目标的后端(例如 logback 1.3 及更高版本)不附带 org.slf4j.impl.StaticLoggerBinder。如果您放置了以 slf4j-api 2.0.x 为目标的日志后端,则需要 在类路径上安装slf4j-api-2.x.jar 。另请参阅相关常见问题条目。

说是把几个 jar 包中的一个(且只能一个)放在类路径上可以解决,当前是 maven 项目,需要找到对应的依赖项添加进来。

看到第二段,理解为升级到 2.0.x 版本不会出现这个报错,所以到 maven repo 中搜索 slf4j-api 依赖库,找到当前最新的版本添加:

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>2.0.16</version>
</dependency>

再次运行,又报了另外一个错:No SLF4J providers were found。继续百度,找到发现 slf4j-api 依赖项,但未找到提供程序 - stackoverflow,里面提到:

SLF4J 代表 Java 的简单日志外观。它提供了所有日志框架的简单抽象。它使用户能够使用单一依赖项使用任何日志框架,例如 Log4j、Logback、JUL (java.util.logging) 等。

也就是说 2.0 版本只提供了抽象,还需要指定首选日志库的依赖项。

对于标准 jdk1.4 日志记录:

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-jdk14 -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-jdk14</artifactId>
    <version>2.0.16</version>
    <scope>runtime</scope>
</dependency>

对于slf4j-simple 日志记录:

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>2.0.16</version>
    <scope>runtime</scope>
</dependency>

对于log4j 日志记录:

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>2.0.16</version>
    <scope>runtime</scope>
</dependency>

三选一,复制 slf4j-jdk1.4 依赖项,再讲版本修改与当前 slf4j-api 版本一致。

更新 maven,再次运行,成功!

当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »