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

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


当前回答

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

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

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

其他回答

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

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

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

我通过添加slf4j-log4j12-1.7.5.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>

这解决了我的问题。

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

请将以下依赖项添加到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>

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