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

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


当前回答

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

其他回答

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

文件->项目结构… 模块->依赖项 从Maven ->搜索:slf4j.nop 单击最新版本-> Apply

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

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

Or

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

我使用Jena,并将相关依赖项添加到pom.xml

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

我尝试添加SLF4J -simple,但它只是消失了“SLF4J:未能加载类”org.slf4j.impl。StaticLoggerBinder " "错误,但logback-classic显示更多详细信息。

官方文件

正如SLF4J手册所述

Java的简单日志Facade (SLF4J)就是一个简单的Facade 或者对各种日志框架进行抽象,例如 java.util。日志、logback和log4j。

and

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

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

NoOp绑定(slf4j-nop)

绑定NOP,无声地丢弃所有日志记录。

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

简单绑定(slf4j-simple)

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

在https://search.maven.org/search?q=g:org.slf4j%20AND%20a:slf4j-simple&core=gav上查看新版本

日志框架的绑定(java.util。日志,logback, log4j)

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

参见https://www.slf4j.org/manual.html#projectDep上的描述和说明


我的意见

我推荐Logback,因为它是log4j项目的后续产品。

在https://search.maven.org/search?q=g:ch.qos.logback%20AND%20a:logback-classic&core=gav上查看绑定的最新版本

你可以获得控制台输出,但如果你需要将日志写入文件,只需将FileAppender配置放在src/main/resources/logback.xml或src/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 type
             ch.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)

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

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