簡體   English   中英

SLF4J:無法加載 class “org.slf4j.impl.StaticLoggerBinder”

[英]SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder"

我的應用程序將同時部署在 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

還伴隨着Failed to load class "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.version}的最新版本

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

這解決了我的問題。 希望它可以幫助其他遇到此問題的人。

這是為那些從谷歌搜索來到這里的人准備的。

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

要么

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

只需將此添加到您的pom.xml

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <version>1.7.21</version>
</dependency>

這里有不少答案建議將 slf4j-simple 依賴項添加到您的 maven pom 文件中。 您可能想要檢查最新版本。

https://mvnrepository.com/artifact/org.slf4j/slf4j-simple,您將找到最新版本的 SLF4J 簡單綁定。 選擇最適合您的那個(2019-12 年的 1.7.30 仍然是 2020-10 年的穩定版本)並將其包含到您的 pom.xml 中。

為方便起見,此處顯示了一些依賴項 - 但當您閱讀本文時,它們可能不是最新的!

2019-10 Alpha 版

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-simple</artifactId>
   <version>2.0.0-alpha1</version>
 </dependency>

2019 年 2 月測試版

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.8.0-beta4</version>
</dependency>

穩定版 2019-12

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-simple</artifactId>
   <version>1.7.30</version>
</dependency>

由於下面的評論,我刪除了范圍測試部分。

您需要在類路徑中添加以下 jar 文件: slf4j-simple-1.6.2.jar 如果沒有,請下載。 請參考http://www.slf4j.org/codes.html#multiple_bindings

有時我們應該會看到警告SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.的注釋SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. .

當在類路徑上找不到合適的 SLF4J 綁定時會發生這種情況

您可以搜索出現此警告的原因。
*slf4j-nop.jarslf4j-simple.jarslf4j-log4j12.jarslf4j-jdk14.jarlogback-classic.jar*中的 jar 之一添加到類路徑應該可以解決問題。

compile "org.slf4j:slf4j-simple:1.6.1"

例如,將上面的代碼添加到您的build.gradle或 maven 項目的pom.xml的相應代碼。

我面臨同樣的錯誤。 我已經在本地開發中配置了 slf4j-api、slf4j-log4j12 和 log4j。 所有配置都很好,但是我從 mvnrepository 復制的 slf4j-log4j12 依賴項具有測試范圍<scope>test</scope> 當我刪除它時,一切都很好。

有時愚蠢的錯誤會讓我們頭疼;)

將文件slf4j-log4j12-1.6.4.jar放在類路徑中即可。

SLF4j 是各種日志框架的抽象。 因此,除了擁有 slf4j 之外,您還需要在類路徑中包含任何日志記錄框架,如 log4j 或 logback(等)。
有一個想法,請參考http://logback.qos.ch/manual/introduction.html 中First Baby Step

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

當我在我的libs使用slf4j-api-1.7.5.jar時。

盡管我嘗試了整個建議的補充罐,如slf4j-log4j12-1.7.5.jarslf4j-simple-1.7.5錯誤消息仍然存在。 當我將slf4j-jdk14-1.7.5.jar添加到 java libs 時,問題終於解決了。

http://www.slf4j.org/download.html獲取整個 slf4j 包

Slf4j 是底層日志框架的外觀,如 log4j、logback、java.util.logging。

為了與底層框架連接,slf4j 使用了一個綁定。

  • log4j - slf4j-log4j12-1.7.21.jar
  • java.util.logging - slf4j-jdk14-1.7.21.jar 等

如果綁定 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

請將以下依賴項添加到 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>

我在使用 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>

作為 jar 包含和純 maven 解決方案的替代方案,您可以將它從 maven 中包含在 gradle 中。

版本1.7.25

// https://mvnrepository.com/artifact/org.slf4j/slf4j-simple
api group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25'

將其放在build.gradle文件的依賴項中。

     <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.21</version>
    </dependency>

將上述依賴項放在 pom.xml 文件中

在 Websphere 案例中,您有一個舊版本的 slf4j-api.jar,1.4.x。 或 1.5.x 躺在某處。 您在 tcServer 上觀察到的行為,即故障轉移到 NOP,發生在 slf4j 版本 1.6.0 及更高版本上。 確保您在所有平台上都使用 slf4j-api-1.6.x.jar,並且類路徑中沒有放置舊版本的 slf4j-api。

我在一個項目 Struts2+Spring 中工作。 所以它需要一個依賴項slf4j-api-1.7.5.jar

如果我運行該項目,我會收到類似的錯誤

無法加載類“org.slf4j.impl.StaticLoggerBinder”

我通過添加slf4j-log4j12-1.7.5.jar解決了我的問題。

所以在你的項目中添加這個 jar 來解決這個問題。

正如SLF4J 手冊所述

Simple Logging Facade for Java (SLF4J) 充當各種日志框架的簡單外觀或抽象,例如 java.util.logging、logback 和 log4j。

一旦您向類路徑添加綁定,警告就會消失。

因此,您應該選擇要使用的綁定。

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.logging、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獲得控制台輸出,但是如果您需要將日志寫入文件,只需將FileAppender配置放入src/main/resources/logback.xmlsrc/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

我添加了這個依賴來解決這個問題:

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

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

這可以使用相同的版本解決。 我試過這個並解決了它

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

根據SLF4J官方文檔

無法加載類 org.slf4j.impl.StaticLoggerBinder

當 org.slf4j.impl.StaticLoggerBinder 類無法加載到內存中時,會報告此警告消息。 當在類路徑上找不到合適的 SLF4J 綁定時,就會發生這種情況。 在類路徑上放置一個(並且只有一個) slf4j-nop.jar、slf4j-simple.jar、slf4j-log4j12.jar、slf4j-jdk14.jar 或 logback-classic.jar 應該可以解決問題。

只需將此 jar和 slf4j api.jar 添加到您的類路徑中即可完成任務。 祝你好運

我解決了添加這個庫:slf4j-simple-1.7.25.jar 你可以在官網下載https://www.slf4j.org/download.html

這是我的 5 美分...

我在運行測試時遇到了同樣的問題。 所以我通過只為測試運行時添加一個實現來修復它。 我正在為這個項目使用 gradle。

// https://mvnrepository.com/artifact/ch.qos.logback/logback-classic

testRuntimeOnly 組:'ch.qos.logback',名稱:'logback-classic',版本:'1.2.3'

對我來說問題是:使用 Hibernate,我看到它已經使用了 slf4j,並且它已經在我的類路徑中,所以我決定使用它。 下一步 - 為 slf4j 添加 imlementor,所以我添加到 maven:

<dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-jdk14</artifactId>
        <version>1.7.25</version>
</dependency>

但它因錯誤而失敗! SLF4J:無法加載類“org.slf4j.impl.StaticLoggerBinder”

解決的辦法是:SLF4J的Hibernate的依賴是1.7.26版本,我添加的次要版本的依賴1.7.25。 所以當我解決這個問題時 - 一切都變得OK了

根據 SLF4J 錯誤代碼

無法加載類 org.slf4j.impl.StaticLoggerBinder 當 org.slf4j.impl.StaticLoggerBinder 類無法加載到內存中時,會報告此警告消息。 當在類路徑上找不到合適的 SLF4J 綁定時,就會發生這種情況。 將 slf4j-nop.jar、slf4j-simple.jar、slf4j-log4j12.jar、slf4j-jdk14.jar 或 logback-classic.jar 中的一個(並且只有一個)放在類路徑上應該可以解決問題。

請注意,slf4j-api 版本 2.0.x 及更高版本使用ServiceLoader機制。 以 slf4j-api 2.x 為目標的 logback 1.3 及更高版本等后端不附帶 org.slf4j.impl.StaticLoggerBinder。 如果您放置了一個以 slf4j-api 2.0.x 為目標的日志記錄后端,您需要在類路徑上使用 slf4j-api-2.x.jar。 另請參閱相關常見問題解答

從 1.6.0 開始,從 SLF4J 1.6 版開始,在沒有綁定的情況下,SLF4J 將默認為無操作 (NOP) 記錄器實現。

如果您負責打包應用程序並且不關心日志記錄,那么將 slf4j-nop.jar 放在您的應用程序的類路徑上將消除此警告消息。 請注意,諸如庫或框架之類的嵌入式組件不應聲明對任何 SLF4J 綁定的依賴,而應僅依賴於 slf4j-api。 當庫聲明對 SLF4J 綁定的編譯時依賴時,它會將綁定強加給最終用戶,從而否定 SLF4J 的目的。

我知道這篇文章有點舊,但萬一其他人遇到這個問題:

將 slf4j-jdk14-XXXjar 添加到您的 CLASSPATH(其中 XXX 是版本號 - 例如 slf4j-jdk14-1.7.5.jar)。

彼得

我使用 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 顯示更多詳細信息。

官方文件

解決方案在他們的官方網站上有說明:

無法加載類 org.slf4j.impl.StaticLoggerBinder

當 org.slf4j.impl.StaticLoggerBinder 類無法加載到內存中時,會報告此警告消息。 當在類路徑上找不到合適的 SLF4J 綁定時,就會發生這種情況。 將 slf4j-nop.jar、slf4j-simple.jar、slf4j-log4j12.jar、slf4j-jdk14.jar 或 logback-classic.jar 中的一個(並且只有一個)放在類路徑上應該可以解決問題。 從 1.6.0 開始,從 SLF4J 1.6 版開始,在沒有綁定的情況下,SLF4J 將默認為無操作 (NOP) 記錄器實現。 如果您負責打包應用程序並且不關心日志記錄,那么將 slf4j-nop.jar 放在您的應用程序的類路徑上將消除此警告消息。 請注意,諸如庫或框架之類的嵌入式組件不應聲明對任何 SLF4J 綁定的依賴,而應僅依賴於 slf4j-api。 當庫聲明對 SLF4J 綁定的編譯時依賴時,它會將綁定強加給最終用戶,從而否定 SLF4J 的目的。

解決方案:我已經使用 Maven 對 intellij 的研究添加到我的項目中,並且我選擇了 slf4j-jdk14.jar。

我的應用程序將同時部署在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

還伴隨Failed to load class "org.slf4j.impl.StaticMDCBinder"

我已經檢查了兩個應用程序服務器的類路徑,沒有其他的slf4j jar。

有人對這里可能發生的事情有任何想法嗎?

我沒有添加任何依賴項,我只是改變了我使用它們的方式。

預覽代碼

(如果您使用的是彈性搜索版本 < 7.0,請取消注釋此代碼)

IndexRequest indexRequest = new IndexRequest(
  "twitter",
  "tweets",
  id // this is to make our consumer idempotent
).source(record.value(), XContentType.JSON);

當前代碼

IndexRequest indexRequest = new IndexRequest("tweets")
  .source(record.value(), XContentType.JSON)
  .id(id); // this is to make our consumer idempotent

我正在使用 bulkrequest 並刪除該錯誤。

我在想法上遇到了同樣的問題,我只是按下了 Maven 菜單中的 Reload 按鈕。

您可以使用以下內容簡單地添加依賴項

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

我有類似的問題,並通過執行以下操作得到解決:

  1. 文件 -> 項目結構...
  2. 模塊 -> 依賴項
  3. 新庫 -> 來自 Maven -> 搜索:slf4j.nop
  4. 點擊最新版本 -> 應用

對我來說,總的解決辦法是:

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>

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

否則我在控制台中遇到了一些異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM