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 依賴得java版本_加載

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指定的全限定名