Logback簡介
1、logback和log4j是同一個作者,logback可以看作是log4j的升級版
2、logback分為三個模塊, logback-core, logback-classic 和logback-access,其中 logback-core是核心,其他兩個模塊依賴core,這個logback-classic是log4j的改善版本,並且原生實現了SLF4J門面(具體參考前文:Java中SLF4J日誌框架的實現原理)。模塊logback-access可以集成於Servlet容器,比如Tomact和Jetty。
3、你可以基於logback-core自己創建其他的模塊。
logback加載
配置加載的順序,上下文初始化的時候會調用ContextInitializer,在這個類中的方法findURLOfDefaultConfigurationFile是用來加載默認的配置文件,
- 先從系統的屬性中獲取鍵為logback.configurationFile的值,如果有,就加載指定的配置文件
- 如果沒有設置,會在classpath中找文件logback-test.xml
- 如果logback-test.xml不存在,搜索logback.groovy配置文件
- 如果logback.groovy不存在,最後查找logback.xml
- 如果以上配置文件不存在,會用SPI的方式加載classpath下的Configurator接口的實現類。
- 最後,如果以上都沒有成功,會默認創建BasicConfigurator實例,BasicConfigurator默認配置了ConsoleAppender,也就是隻能輸出到控制枱。
logback的配置
logback的configuration
logback的重點應當是Appender、Logger、Pattern,在這之前先簡單瞭解一下logback的,只有三個屬性:
- scan:當scan被設置為true時,當配置文件發生改變,將會被重新加載,默認為true
- scanPeriod:檢測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認為毫秒,當scan=true時這個值生效,默認時間間隔為1分鐘
- debug:當被設置為true時,將打印出logback內部日誌信息,實時查看logback運行信息,默認為false
logger與root
先從最基本的logger與root開始。
logger用來設置某一個包或者具體某一個類的日誌打印級別、以及指定appender。logger可以包含零個或者多個appender-ref元素,標識這個appender將會添加到這個logger。logger僅有一個name屬性、一個可選的level屬性和一個可選的additivity屬性:
- name:用來指定受此logger約束的某一個包或者具體的某一個類
- level:用來設置打印級別,五個常用打印級別從低至高依次為TRACE、DEBUG、INFO、WARN、ERROR,如果未設置此級別,那麼當前logger會繼承上級的級別
- additivity:是否向上級logger傳遞打印信息,默認為true
root也是logger元素,但是它是根logger,只有一個level屬性,因為它的name就是ROOT。如果我們有配置logger,但是沒有在logger種配置appender處理日誌,那麼logger的日誌信息會傳遞到父級root。
appender
接着看一下appender,appender是configuration的子節點,是負責寫日誌的組件。appender有兩個必要屬性name和class:
- name指定的名稱
- class指定的全限定名