[英]Intellij IDEA SLF4J: Failed to load 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.jar
、 slf4j-simple.jar
、 slf4j-log4j12.jar
、 slf4j-jdk14.jar
或logback-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.jar
, slf4j-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 使用了一個綁定。
如果綁定 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 拉入您的項目中
請將以下依賴項添加到 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.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 )
我添加了這個依賴來解決這個問題:
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
<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.