1. 程式人生 > >使用SLF4J時的一個錯誤Failed to load class org.slf4j.impl.StaticLoggerBinder

使用SLF4J時的一個錯誤Failed to load class org.slf4j.impl.StaticLoggerBinder

問題描述

使用日誌一直都是使用了slf4j-apislf4j-log4j12log4j這三個包結合起來使用,新搭建了一個專案,然後建立了一個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>

這個錯誤就沒有了。