我的应用程序将部署在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。
有人知道这里会发生什么吗?
我在WebSphere 6.1中也遇到了同样的问题。正如Ceki所指出的,WebSphere正在使用大量的jar,其中一个指向slf4j的旧版本。
No-Op回退只发生在slf4j -1.6+上,因此任何比它更老的东西都会抛出异常并停止部署。
SLf4J站点中有一个文档可以解决这个问题。随后,我在应用程序中添加了slf4j-simple-1.6.1.jar以及我已经拥有的slf4j-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警告的说明:请参阅http://www.slf4j.org/codes.html#StaticLoggerBinder以了解更多详细信息。
当在类路径上找不到合适的SLF4J绑定时,就会发生这种情况
您可以搜索此警告产生的原因。
将*slf4j-nop.jar、slf4j-simple.jar、slf4j-log4j12.jar、slf4j-jdk14.jar或logback-classic.jar*中的一个jar添加到类路径中应该可以解决问题。
compile "org.slf4j:slf4j-simple:1.6.1"
例如,将上述代码添加到构建中。Gradle或maven项目的pom.xml的相应代码。