1. 程式人生 > >使用SLF4J和LOGBACK (一 : 基本使用)

使用SLF4J和LOGBACK (一 : 基本使用)

asi 個人 fig 接口實現 pac 再次 intro 級別 多說

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的簡單配置。

使用SLF4J和LOGBACK (一 : 基本使用)