我的应用程序将部署在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。

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


当前回答

您的问题很可能是因为<scope>test</scope>(在某些情况下也<scope>提供</scope>),正如前面提到的@thangaraj。

文档中说:

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

所以,如果你不需要测试依赖项,那么你可以使用代替(你将在mvnrepository中看到的):

<!-- 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>

其他回答

如果您使用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/

有时我们应该看到来自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的相应代码。

Slf4j是底层日志框架(如log4j、logback、java.util.logging)的门面。

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

log4j - slf4j-log4j12-1.7.21.jar java.util.logging – slf4j-jdk14-1.7.21.jar etc

如果没有绑定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

我添加了这个依赖来解决这个问题:

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

在将logback-classic升级到最新版本:1.4.5之后,我遇到了这个问题SLF4J:未能加载类“org.slf4j.impl”。StaticLoggerBinder”。logback-classic: 1.4。X没有org.slf4j.impl类。StaticLoggerBinder,这就是问题所在。

供您参考:slf4j-api 2.0。x将不再搜索StaticLoggerBinding。详情请参阅https://www.slf4j.org/faq.html#changesInVersion200。