我的应用程序将部署在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 implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

然而,当我在WebSphere中部署时,我得到了一个java.lang.NoClassDefFoundError: org.slf4j.impl.StaticLoggerBinder。

同时伴有加载类“org.slf4j.impl.StaticMDCBinder”失败

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

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


当前回答

我在使用Java 9库的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错误代码

加载org.slf4j.impl.StaticLoggerBinder类失败 当org.slf4j.impl。无法将StaticLoggerBinder类装入内存。当在类路径上找不到合适的SLF4J绑定时,就会发生这种情况。在类路径上放置一个slf4j-nop.jar、slf4j-log4j12.jar、slf4j-jdk14.jar或logback-classic.jar应该可以解决问题。

注意slf4j-api 2.0版本。x和以后使用ServiceLoader机制。后端,如logback 1.3和以后的目标slf4j-api 2。x,不附带org.slf4j.impl.StaticLoggerBinder。如果您放置了一个针对slf4j-api 2.0的日志记录后端。X,在类路径上需要slf4j-api-2.x.jar。参见相关的faq条目。

从SLF4J 1.6版开始,在没有绑定的情况下,SLF4J将默认为一个no-operation (NOP)记录器实现。

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

对我来说,总的解决方案是:

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>

plus

2创建文件log4j.properties

然后在里面加上:

# Root logger option
log4j.rootLogger=INFO, stdout

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

否则我在控制台有一些异常。

可以使用相同的版本来解决这个问题。我试过了,而且解决了

< >的依赖 < groupId > org.slf4j < / groupId > < artifactId > slf4j-api < / artifactId > <版本> 1.7.5 > < /版本 < / >的依赖 < >的依赖 < groupId > org.slf4j < / groupId > < artifactId > slf4j-log4j12 < / artifactId > <版本> 1.7.5 > < /版本 < / >的依赖

他们的官网给出了解决方案:

Failed to load class org.slf4j.impl.StaticLoggerBinder This warning message is reported when the org.slf4j.impl.StaticLoggerBinder class could not be loaded into memory. This happens when no appropriate SLF4J binding could be found on the class path. Placing one (and only one) of slf4j-nop.jar slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar or logback-classic.jar on the class path should solve the problem. SINCE 1.6.0 As of SLF4J version 1.6, in the absence of a binding, SLF4J will default to a no-operation (NOP) logger implementation. If you are responsible for packaging an application and do not care about logging, then placing slf4j-nop.jar on the class path of your application will get rid of this warning message. Note that embedded components such as libraries or frameworks should not declare a dependency on any SLF4J binding but only depend on slf4j-api. When a library declares a compile-time dependency on a SLF4J binding, it imposes that binding on the end-user, thus negating SLF4J's purpose.

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

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

如果我运行这个项目,我会得到这样的错误

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

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

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