SLF4J報(bào)錯(cuò)解決:No SLF4J providers were found的問題
1.解決SLF4J報(bào)錯(cuò)
我們?cè)谧约旱捻?xiàng)目中使用了SLF4J,或者引入了某開源項(xiàng)目時(shí),他的項(xiàng)目中用了SLF4J,
運(yùn)行時(shí)會(huì)報(bào)如下的錯(cuò)誤:
SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#noProviders for further details.
檢查自己的maven依賴,發(fā)現(xiàn)已經(jīng)引入了slf4j-api-xx.jar了,這是為什么呢?
其原因是,SLF4J本身不是一個(gè)日志實(shí)現(xiàn)庫,而是一個(gè)日志庫的抽象層,它必須依賴底層的日志庫,SLF4J必須和其他日志庫配合才能正常運(yùn)行。
一般來說,需要將抽象層(例如slf4j-api-xx.jar)+中間層(例如slf4j-log4j12)+實(shí)現(xiàn)層(例如log4j)這三層都配置好才能保證SLF4J正常運(yùn)行。
有的日志庫也可以去掉中間層,例如slf4j-api和slf4j-simple就可以直接配合。
2.抽象層+中間層+實(shí)現(xiàn)層的方式解決
引入三個(gè)下面三個(gè)依賴,重新編譯
<dependency> ? <groupId>org.slf4j</groupId> ? <artifactId>slf4j-api</artifactId> ? <version>1.8.0-beta4</version> </dependency> <dependency> ? <groupId>org.slf4j</groupId> ? <artifactId>slf4j-log4j12</artifactId> ? <version>1.8.0-beta4</version> </dependency> <dependency> ? <groupId>log4j</groupId> ? <artifactId>log4j</artifactId> ? <version>1.2.17</version> </dependency>
代碼測(cè)試后,發(fā)現(xiàn)SLF4J的報(bào)錯(cuò)不存在了,但是出現(xiàn)了新的報(bào)錯(cuò)如下:
log4j:WARN No appenders could be found for logger.
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
這說明SLF4J已經(jīng)配置好了,但是Log4j的配置還有問題。
這需要在resource路徑下面添加一個(gè)配置文件log4j.properties,內(nèi)容如下(內(nèi)容可以自定義):
# Set root logger level to DEBUG and its only appender to console. log4j.rootLogger=DEBUG, console # console is set to be a ConsoleAppender. log4j.appender.console=org.apache.log4j.ConsoleAppender # console uses PatternLayout. log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.Target = System.out log4j.appender.console.Threshold = DEBUG log4j.appender.console.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
再次運(yùn)行后,輸出正常了
3.抽象層+實(shí)現(xiàn)層的方式解決
引入下面的依賴,重新編譯后就正常了,注意假如你從maven庫里復(fù)制來的有 test,
需要改成 compile或者就不加這個(gè)scope,不加的時(shí)候默認(rèn)是compile,才能正常使用,
test表示只有在測(cè)試環(huán)境下,才可以使用,而springboot是運(yùn)行在main方法中,不屬于測(cè)試環(huán)境,所以這個(gè)包就相當(dāng)于沒有加入依賴,也就沒有被加載到。
改成compile則表示編譯的時(shí)候就會(huì)加載此jar包
?? ?<dependency> ? ? ? ? ? ? <groupId>org.slf4j</groupId> ? ? ? ? ? ? <artifactId>slf4j-api</artifactId> ? ? ? ? ? ? <version>1.8.0-beta4</version> ? ? ? ? </dependency> ? ? ? ? <dependency> ? ? ? ? ? ? <groupId>org.slf4j</groupId> ? ? ? ? ? ? <artifactId>slf4j-simple</artifactId> ? ? ? ? ? ? <version>1.8.0-beta4</version> ? ? ? ? </dependency>
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java中Integer.valueOf,parsetInt() String.valueOf的區(qū)別和結(jié)果代碼解析
本文通過代碼給大家講解了JAVA中Integer.valueOf, parsetInt() String.valueOf的區(qū)別和結(jié)果,需要的朋友可以參考下2018-05-05
Java?spring?通過注解方式創(chuàng)建對(duì)象的示例詳解
這篇文章主要介紹了java?spring?通過注解方式創(chuàng)建對(duì)象,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02
jmeter+ant+jenkins自動(dòng)化測(cè)試環(huán)境配置搭建過程
在搭建jmeter+ant+jenkins環(huán)境有些前提條件,那就是要先配置好java環(huán)境、安裝好jenkins以及配置好jmeter,這樣才能省去很多的事情,對(duì)jmeter+ant+jenkins自動(dòng)化測(cè)試環(huán)境配置搭建過程感興趣的朋友一起看看吧2021-12-12
Java實(shí)現(xiàn)按照大小寫字母順序排序的方法
這篇文章主要介紹了Java實(shí)現(xiàn)按照大小寫字母順序排序的方法,涉及java數(shù)組遍歷、編碼轉(zhuǎn)換、判斷等相關(guān)操作技巧,需要的朋友可以參考下2017-12-12
詳解使用Spring3 實(shí)現(xiàn)用戶登錄以及權(quán)限認(rèn)證
這篇文章主要介紹了詳解使用Spring3 實(shí)現(xiàn)用戶登錄以及權(quán)限認(rèn)證,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。2017-03-03
詳解MyBatis Mapper 代理實(shí)現(xiàn)數(shù)據(jù)庫調(diào)用原理
這篇文章主要介紹了詳解MyBatis Mapper 代理實(shí)現(xiàn)數(shù)據(jù)庫調(diào)用原理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10

