1.SLF4J是什么?
slf4j是一個日志門面,它不是具體的日志實現框架,而是提供了通用的日志接口,按個人理解來說,是通過接口實現多態,來滿足應用在不同日志框架間切換的需求。
例如在程序中我們需要記錄日志,使用SLF4J提供的接口來調用:
Logger logger = LoggerFactory.getLogger(Class.class); logger.info();
上邊兩行代碼中的Logger和LoggerFactory對象均來自SLF4J包中。
具體的日志實現框架,我們可以選擇LOG4J,LOGBACK等作為日志的具體實現,但是日志的打印輸出統一使用SLF4J提供的接口。
這樣在切換日志實現框架時,由於日志打印相關操作都是使用slf4j的接口,和具體的實現無關。只需要替換日志實現框架即可輕松實現日志框架的替換。
2.LOGBACK:
logback是一個日志記錄框架,本文只介紹開發常用的配置和使用,並沒有很深入的說明,有需求的可以看官網文檔,很詳細的介紹了logback,
本文也是從官網的文檔中摘選出了開發常用的配置來說明如何使用該框架記錄日志
2.1 引入jar包:
使用logback需要引入相關jar包:slf4j-api.jar,logback-core.jar,logback-classic.jar。通過maven引用即可,不多說了。
2.2 測試類:
package chapters.introduction; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class HelloWorld1 { public static void main(String[] args) { Logger logger = LoggerFactory.getLogger("chapters.introduction.HelloWorld1"); logger.debug("Hello world."); } }
上邊的代碼及其簡單,main方法中使用了SLF4J的Logger對象打印了Hello world字符串,直接運行main方法將得到如下結果:
20:49:07.962 [main] DEBUG chapters.introduction.HelloWorld1 - Hello world.
上邊這行輸出中,第一個字段的時間是當前系統時間,第二個字段是運行方法所在的線程名稱,第三個字段是日志級別
第四個字段是打印日志的類完整路徑,- 之后的內容是具體的打印內容
我沒做任何的配置,所以以上的輸出格式其實就是logback默認的日志格式,日志的默認級別就是DEBUG
2.3 打印logback內部狀態:
沒做任何配置的情況下我們也可以使用,但是默認的格式和日志級別不一定是我們想要的,如果我們想定制需要如何寫?
首先打印一下logback日志內部的狀態看一下輸出結果,修改一下上面的代碼如下:
public static void main(String[] args) { Logger logger = LoggerFactory.getLogger(HelloWorld1.class); logger.debug("Hello world."); LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); StatusPrinter.print(lc); }
再次運行main方法將看到如下的輸出:
可以看到截圖中有三個Could NOT find,這說明在logback在運行時會按順序找三個文件,但是都沒有找到,最后一行Setting up default configuration表明使用默認的配置。
所以如果需要定制logback,只需要提供相應的文件即可。按順序分別是:logback-test.xml,logback.groovy,logback.xml
那么默認的配置是什么?又在哪里?
答案是logback有個:
BasicConfigurator類,這個類的配置就是logback為我們提供的默認配置選項,有興趣的可以去看看源碼。
下一篇介紹logback的簡單配置。