使用SLF4J時的一個錯誤Failed to load class org.slf4j.impl.StaticLoggerBinder
問題描述
使用日誌一直都是使用了slf4j-api
、slf4j-log4j12
、log4j
這三個包結合起來使用,新搭建了一個專案,然後建立了一個main
方法進行測試執行。然後發現報錯了。
Failed to load class org.slf4j.impl.StaticLoggerBinder
解決過程
去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中的一個(並且只有一個)應該可以解決問題。
自1.6.0起SLF4J版本1.6 以來,在沒有繫結的情況下,SLF4J將預設為無操作(NOP)記錄器實現。
如果您負責打包應用程式並且不關心日誌記錄,那麼將slf4j-nop.jar放在應用程式的類路徑中將擺脫此警告訊息。請注意,嵌入式元件(如庫或框架)不應宣告對任何SLF4J繫結的依賴關係,但僅依賴於slf4j-api。當庫宣告對SLF4J繫結的編譯時依賴性時,它會將該繫結強加給終端使用者,從而否定SLF4J的目的。
總的來說,就是缺少slf4j-log4j12.jar
這個依賴,但是我的是Maven專案,我很確定我已經加入了這個包,但是為什麼還是會出錯呢。
後來才發現了問題的所在,我的依賴如下所示:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.log4j.version}</version>
<scope>test</scope >
</dependency>
因為我把範圍設定為test,也就是說只有在測試環境下,才可以使用,而我是在main
方法中直接執行,所以不屬於測試環境,所以這個包相當於就沒有加入依賴。後來修改為:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.log4j.version}</version>
<scope>compile</scope >
</dependency>
這個錯誤就沒有了。