SLF4J:无法加载类"org.slf4j.impl.静态LoggerBinder"

我的应用程序将部署在tcServer和WebSphere 6.1上。此应用程序使用ehCache,因此需要slf4j作为依赖项。因此,我将slf4j-api.jar(1.6)jar添加到我的war文件包中。

应用程序在tcServer中运行正常,除了以下错误:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".SLF4J: Defaulting to no-operation (NOP) logger implementationSLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

但是,当我在WebSphere中部署时,我得到了java.lang.NoClassDefFoundError: org.slf4j.impl.StaticLoggerBinder

伴随着Failed to load class "org.slf4j.impl.StaticMDCBinder"

我检查了两个应用程序服务器的类路径,没有其他slf4j jar。

有人知道这里可能会发生什么吗?

1447578 次浏览

您需要在类路径中添加以下jar文件:slf4j-simple-1.6.2.jar。如果您没有,请下载它。请参考http://www.slf4j.org/codes.html#multiple_bindings

在WebSphere案例中,您有一个旧版本的slf4j-api.jar,1.4. x。或1.5. x躺在某处。您在tcServer上观察到的行为,即故障转移到NOP,发生在slf4j版本1.6.0及更高版本上。确保您在所有平台上使用slf4j-api-1.6.x.jar,并且类路径上没有放置旧版本的slf4j-api。

我在WebSphere 6.1中遇到了同样的问题。正如Ceki指出的那样,WebSphere正在使用大量的jar,其中一个指向旧版本的slf4j。

No-Op回退仅发生在slf4j-1.6+中,因此任何早于此的内容都会引发异常并停止部署。

SLf4J网站中有一个留档解决了这个问题。我遵循了这个,并将slf4j-simple-1.6.1.jarslf4j-api-1.6.1.jar一起添加到我的应用程序中,我已经有了。

如果您使用Maven,请添加以下依赖项,其中${slf4j.version}最新版本的slf4j

<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>${slf4j.version}</version></dependency>

这解决了我的问题。

将文件slf4j-log4j12-1.6.4.jar放在类路径中就可以了。

SLF4j是一个抽象用于各种日志框架。因此,除了拥有slf4j之外,您还需要在类路径中包含任何日志框架,例如log4j或logback(等)。
要有一个想法,请参考http://logback.qos.ch/manual/introduction.html中的婴儿第一步

我正在一个项目Struts2+Spring中工作。所以它需要一个依赖项slf4j-api-1.7.5.jar

如果我运行该项目,我将会遇到如下错误

无法加载类“org.slf4j.impl.静态LoggerBinder”

我通过添加slf4j-log4j12-1.7.5.jar解决了我的问题。

所以在你的项目中添加这个jar来解决这个问题。

我知道这篇文章有点旧,但是如果其他人遇到这个问题:

将slf4j-jdk14-X.X.X.jar添加到CLASSPATH(其中X. X. X是版本号-例如slf4j-jdk14-1.7.5.jar)。

HTH彼得

当我遇到以下错误时,我进入了这个问题:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".SLF4J: Defaulting to no-operation (NOP) logger implementationSLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

当我在我的libs中使用slf4j-api-1.7.5.jar时。

尽管我尝试了整个建议的补码罐,例如slf4j-log4j12-1.7.5.jarslf4j-simple-1.7.5,但错误消息仍然存在。当我将slf4j-jdk14-1.7.5.jar添加到Java库时,问题终于得到了解决。

http://www.slf4j.org/download.html处获取整个slf4j包

这是给那些从谷歌搜索来到这里的人的。

如果您使用maven,只需添加以下内容

   <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.5</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.5</version></dependency>

   <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.5</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>1.6.4</version></dependency>

如果您正在使用maven进行依赖管理,那么您可以在pom.xml中添加以下依赖项

<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.5.6</version></dependency>

对于非Maven用户只需下载库并将其放入您的项目类路径中。

在这里您可以看到详细信息:http://www.mkyong.com/wicket/java-lang-classnotfoundexception-org-slf4j-impl-staticloggerbinder/

只需将其添加到您的pom.xml

<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>1.7.21</version></dependency>

根据SLF4J官方留档

加载类失败org.slf4j.impl.StaticLoggerBinder

此警告消息在org.slf4j.impl.静态LoggerBinder类无法加载到内存。当找不到合适的SLF4J绑定时会发生这种情况在类路径上。放置一个(而且只有一个)slf4j-nop.jar,slf4j-simple.jarslf4j-log4j12.jarslf4j-jdk14.jar类路径上的logback-classic.jar应该可以解决问题。

只需将这个罐子和slf4japi.jar添加到类路径即可完成工作。祝你好运

我使用耶拿,我添加了同伴依赖pom.xml

<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.0.13</version></dependency>

我尝试添加slf4j简单,但它只是消失了“SLF4J:未能加载类”org.slf4j.impl.静态LoggerBinder“”错误,但logback经典显示更多详细信息。

正式文件

Slf4j是底层日志框架的外观,如log4j、logback、java.util.logging.

为了连接底层框架,slf4j使用绑定。

  • log4j-slf4j-log4j12-1.7.21.jar
  • java.util.logging-slf4j-jdk14-1.7.21.jar等

如果错过绑定jar,则会引发上述错误。您可以下载此jar并将其添加到类路径。

对于maven依赖,

<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.21</version></dependency>

这种依赖性除了slf4j-log4j12-1.7.21.jar之外,还会将slf4j-api-1.7.21.jar以及log4j-1.2.17.jar拉入您的项目

参考:http://www.slf4j.org/manual.html

有时我们应该看到警告SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.中的注释。

当在类路径上找不到合适的SLF4J绑定时就会发生这种情况

您可以搜索出现此警告的原因。
*slf4j-nop.jarslf4j-simple.jarslf4j-log4j12.jarslf4j-jdk14.jarlogback-classic.jar*中的一个jar添加到类路径应该可以解决问题。

compile "org.slf4j:slf4j-simple:1.6.1"

例如,将上述代码添加到您的build.gradle或将相应的代码添加到maven项目的pom.xml

请将以下依赖项添加到pom以解决此问题。

<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>1.7.25</version><scope>test</scope></dependency>
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.25</version></dependency>

我解决了添加这个库:slf4j-simple-1.7.25.jar你可以在官方网站上下载这个https://www.slf4j.org/download.html

解决方案显示在他们的官网链接:

加载类失败org.slf4j.impl.StaticLoggerBinder

此警告消息在org.slf4j.impl.静态LoggerBinder类无法加载到内存。当找不到合适的SLF4J绑定时会发生这种情况在类路径上。放置一个(且仅一个)slf4j-nop.jarslf4j-simple.jarslf4j-log4j12.jarslf4j-jdk14.jar类路径上的logback-classic.jar应该可以解决问题。1.6.0从SLF4J版本1.6开始,在没有绑定的情况下,SLF4J将默认为无操作(NOP)记录器实现。如果您是负责打包一个应用程序,不在乎日志记录,然后将slf4j-nop.jar放在您的类路径上应用程序将删除此警告消息。请注意,嵌入库或框架等组件不应声明依赖于任何SLF4J绑定,但仅依赖于slf4j-api。当库声明了对SLF4J绑定的编译时依赖项,它将该绑定强加给最终用户,从而否定了SLF4J的目的。

解决方案:我已经添加到我的项目使用maven研究intellij和我选择了slf4j-jdk14.jar.

我在使用Java9库的Spring-boot-2应用程序时遇到了类似的问题。

在我的pom.xml中添加以下依赖项为我解决了这个问题:

    <dependency><groupId>com.googlecode.slf4j-maven-plugin-log</groupId><artifactId>slf4j-maven-plugin-log</artifactId><version>1.0.0</version></dependency>

这里有相当多的答案建议将slf4j简单依赖项添加到您的maven pom文件中。您可能需要检查最新版本。

https://mvnrepository.com/artifact/org.slf4j/slf4j-simple您会发现最新版本的SLF4J简单绑定。选择最适合您的版本(2021-07年的1.7.32仍然是2021-10年的稳定版本)并将其包含到您的pom.xml.

为方便起见,此处显示了一些依赖项-但当您阅读本文时,它们可能不是最新的!

表:2021-08年度alpha版本

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>2.0.0-alpha5</version></dependency>

2019年2月的Beta版本

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>1.8.0-beta4</version></dependency>

稳定版2021-07

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

由于下面的评论,我删除了范围测试部分。

我添加了此依赖项来解决此问题:

https://mvnrepository.com/artifact/org.slf4j/slf4j-simple/1.7.25

我面临同样的错误。我在本地开发中配置了slf4j-api、slf4j-log4j12和log4j。所有配置都很好,但是我从mvnreposaku复制的slf4j-log4j12依赖项具有测试范围<scope>test</scope>。当我删除这个时,一切都很好。

有时愚蠢的错误打破了我们的头;)

作为jar包含和纯maven解决方案的替代方案,您可以将其从maven包含在gradle中。

版本1.7.25示例

// https://mvnrepository.com/artifact/org.slf4j/slf4j-simpleapi group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25'

将其放入build.gradle文件的依赖项中。

SLF4J手册状态

用于Java的简单日志记录外观(SLF4J)作为一个简单的外观或各种日志框架的抽象,例如java.util.logging,logback和log4j。

一旦向类路径添加绑定,警告就会消失。

因此,您应该选择要使用的绑定。

noOp绑定(slf4j-nop)

绑定NOP,静默丢弃所有日志记录。

https://search.maven.org/search?q=g:org.slf4j%20AND%20a: slf4j-nop&core=gav处检查新版本

简单绑定(slf4j-简单)

将所有事件输出到System.err.仅打印INFO级别及更高级别的消息。此绑定在小型应用程序的上下文中可能很有用。

https://search.maven.org/search?q=g:org.slf4j%20AND%20a: slf4j-简单&core=gav处检查新版本

日志框架的绑定(java.util.logging、logback、log4j)

如果要将日志写入文件,则需要其中一个绑定。

请参阅https://www.slf4j.org/manual.html#projectDep中的描述和说明


我的意见

我会推荐登录,因为它是log4j项目的后继者。

https://search.maven.org/search?q=g:ch.qos.logback%20AND%20a: logback-经典&core=gav处检查最新版本的绑定

您可以开箱即用地获得控制台输出,但如果您需要将日志写入文件,只需将FileAppender配置放入src/main/resources/logback.xmlsrc/test/resources/logback-test.xml,就像这样:

<?xml version="1.0" encoding="UTF-8"?><configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><!-- encoders are assigned the typech.qos.logback.classic.encoder.PatternLayoutEncoder by default --><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><appender name="FILE" class="ch.qos.logback.core.FileAppender"><file>logs/logs.log</file>
<encoder><pattern>%date %level [%thread] %logger{10} - %msg%n</pattern></encoder></appender>
<root level="debug"><appender-ref ref="STDOUT" /><appender-ref ref="FILE" /></root>
<logger level="DEBUG" name="com.myapp"/></configuration>

(参见手册中的详细描述:https://logback.qos.ch/manual/configuration.html

很可能你的问题是因为<scope>test</scope>(在某些情况下也是<scope>provided</scope>),如前所述@陈志立

需求文档表示:

此范围表示正常情况下不需要依赖项应用程序的使用,并且仅可用于测试编译和执行阶段。<强>测试依赖项不是可传递的,仅存在于测试和执行类路径中。

因此,如果您不需要依赖项用于测试目的,那么您可以使用而不是(您将在mvn仓库中看到的):

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-nop --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-nop</artifactId><version>1.7.24</version><scope>test</scope></dependency>

没有任何作用域(当没有提供其他作用域时,默认为编译范围):

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

这与:

 <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-nop --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-nop</artifactId><version>1.7.25</version><scope>compile</scope></dependency>

这是我的5美分…

我在运行测试时遇到了同样的问题。所以我通过仅为测试运行时添加一个实现来修复它。我在这个项目中使用gradle。

//https://mvnrepository.com/artifact/ch.qos.logback/logback-classic

testRuntime唯一组:'ch.qos.logback',名称:'logback经典',版本:'1.2.3'

     <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>1.7.21</version></dependency>

将上述依赖项放入pom.xml文件中

我的问题是:使用Hibernate,我看到它已经使用了slf4j,并且它已经在我的类路径中,所以我决定使用它。下一步-为slf4j添加imlementor,所以我添加了maven:

<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-jdk14</artifactId><version>1.7.25</version></dependency>

但是它失败了,出错了!SLF4J:未能加载类“org.slf4j.impl.静态日志绑定器”

解决方案是:Hibernate对slf4j的依赖是版本1.7.26,我添加了次要版本依赖1.7.25。所以当我修复这个时-一切都变成了OK

在payara 5.191上遇到同样的问题

jcl-over-slf4j和slf4j-log4j12一起解决了这个问题

<properties><slf4j.version>1.7.29</slf4j.version></properties>
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version><type>jar</type></dependency>
<dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>${slf4j.version}</version></dependency>
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j.version}</version></dependency>

我没有添加任何依赖项,我只是改变了我使用它们的方式。

预览代码

(如果您使用的是弹性搜索版本<7.0,请取消注释此代码)

IndexRequest indexRequest = new IndexRequest("twitter","tweets",id // this is to make our consumer idempotent).source(record.value(), XContentType.JSON);

当前代码

IndexRequest indexRequest = new IndexRequest("tweets").source(record.value(), XContentType.JSON).id(id); // this is to make our consumer idempotent

我正在使用BulkRequest并删除该错误。

根据SLF4J错误代码

无法加载类org.slf4j.impl.静态LoggerBinder此警告消息是当org.slf4j.impl.StaticLoggerBinder类无法加载到内存中时报告的。当在类路径上找不到适当的SLF4J绑定时会发生这种情况。在类路径上放置一个(并且只有一个)slf4j-nop.jarslf4j-simple.jar、slf4j-log4j12.jar、slf4j-jdk14.jar或logback-classic.jar应该可以解决问题。

请注意,slf4j-api 2.0. x及更高版本使用服务加载器机制。后端,如logback 1.3及更高版本,其目标slf4j-api 2. x,不附带org.slf4j.impl.StaticLoggerBinder。如果您放置一个以slf4j-api 2.0. x为目标的日志后端,您需要在类路径上slf4j-api-2.x.jar。另请参阅相关常见问题条目。

自1.6.0从SLF4J 1.6版开始,在没有绑定的情况下,SLF4J将默认为无操作(NOP)记录器实现。

如果您负责打包应用程序并且不关心日志记录,那么将slf4j-nop.jar放在应用程序的类路径上将摆脱此警告消息。请注意,库或框架等嵌入式组件不应声明依赖于任何SLF4J绑定,而应仅依赖于slf4j-api。当库声明编译时依赖于SLF4J绑定时,它会将该绑定强加给最终用户,从而否定SLF4J的目的。

这可以使用相同的版本解决。我试过这个并解决了它

      <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.5</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.5</version></dependency>

我也遇到过类似的问题,通过以下操作解决了:

  1. 文件->项目结构…
  2. 模块->依赖
  3. 新库->从Maven->搜索:slf4j.nop
  4. 点击最新版本->应用

对我来说,总修复是:

1

<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.5</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.5</version></dependency>

加上

2创建文件log4j.properties

并在里面添加:

# Root logger optionlog4j.rootLogger=INFO, stdout
# Direct log messages to stdoutlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.outlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

另外,我在控制台中得到了一些例外。