logger 配置文件詳解

Logback配置文件詳解

Logback,Java 日誌框架。算法

Logback 如何加載配置的express

  1. logback 首先會查找 logback.groovy 文件
  2. 當沒有找到,繼續試着查找 logback-test.xml 文件
  3. 當沒有找到時,繼續試着查找 logback.xml 文件
  4. 若是仍然沒有找到,則使用默認配置(打印到控制檯)

 

configuration

configuration 是配置文件的根節點,他包含的屬性:安全

  • scan 
      當此屬性設置爲 true 時,配置文件若是發生改變,將會被從新加載,默認值爲 true
  • scanPeriod 
      設置監測配置文件是否有修改的時間間隔,若是沒有給出時間單位,默認單位是毫秒。但 scan 爲 true 時,此屬性生效,默認的時間間隔爲 1 分鐘
  • debug 
      當此屬性設置爲 true 時,將打印出 logback 內部日誌信息,實時查看 logback 運行狀態,默認值爲 false。
<configuration scan="true" scanPeriod="60 seconds" debug="false"> 
<!-- 其餘配置省略-->
</configuration>

 

configuration 的子節點

設置上下文名稱:contextName

每一個 logger 度關聯到 logger 上下文,默認上下文名稱爲 「default」。能夠經過設置 contextName 修改上下文名稱,用於區分不一樣應該程序的記錄app

<configuration scan="true" scanPeriod="60 seconds" debug="false"> 
<contextName>myAppName</contextName>
<!-- 其餘配置省略-->
</configuration>

 

設置變量:property

用於定義鍵值對的變量, property 有兩個屬性 name 和 value,name 是鍵,value 是值,經過 property 定義的鍵值對會保存到logger 上下文的 map 集合內。定義變量後,可使用 「${}」 來使用變量框架

<configuration scan="true" scanPeriod="60 seconds" debug="false"> 
<property name="APP_Name" value="myAppName" />
<contextName>${APP_Name}</contextName>
<!-- 其餘配置省略-->
</configuration>

 

獲取時間戳字符串:timestamp

timestamp 有兩個屬性,key:標識此 timestamp 的名字;datePattern:時間輸出格式,遵循SimpleDateFormat 的格式測試

<configuration scan="true" scanPeriod="60 seconds" debug="false"> 
<timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>
<contextName>${bySecond}</contextName>
<!-- 其餘配置省略-->
</configuration>

 

logger

logger 有兩種級別,一種是 root,一種是普通的 logger,logger 是用來設置某一個包或者具體的某一個類的日誌打印機級別,以及制定的 appender。 
logger 有三個屬性lua

  • name:用來指定此 logger 約束的某一個包或者具體的某一個類
  • level:用來設置打印機別,
  • addtivity:是否向上級 logger 傳遞打印信息。默認是 true

每一個 logger 都有對應的父級關係,它經過包名來決定父級關係,root 是最高級的父元素。 
下面定義了四個 logger,他們的父子關係從小到大爲: 
com.lwc.qg.test.logbackDemo → com.lwc.qg.tes → com.lwc.qg → rootspa

<!-- 根 logger -->
<root level="info">
<appender-ref ref="STDOUT"/>
</root>

<!--
普通的 logger
name:類名或包名,標誌該 logger 與哪一個包或哪一個類綁定
level:該 logger 的日誌級別
additivity:是否將日誌信息傳遞給上一級
-->
<logger name="com.lwc.qg.test.logbackDemo" level="debug" additivity="true">
<appender-ref ref="STDOUT"/>
</logger>

<logger name="com.lwc.qg.test" level="info" additivity="true">
<appender-ref ref="STDOUT"/>
</logger>

<logger name="com.lwc.qg" level="info" additivity="true">
<appender-ref ref="STDOUT"/>
</logger>

  從該種級別來看,若是此時在最低層的 logger 輸出日誌信息,以該配置做爲基礎,它將會向父級的全部 logger 依次傳遞,因此按理來講一個打印信息將會打印四次debug

Alt text

  從控制檯上看,的確每條日誌信息都被打印出了四次,可是細心從配置文件上來看,root 的日誌級別配置的爲 info,可是卻輸出 debug 級別的日誌信息,因此從測試結果能夠看出,向上傳遞的日誌信息的日誌級別將由最底層的子元素決定(最初傳遞信息的 logger),由於子元素設置的日誌級別爲 debug,因此也輸出了 debug 級別的信息。 
  所以,從理論上來講,若是子元素日誌級別設置高一點,那麼也將會只輸出高級別的日誌信息。實際上也是如此,若是咱們把 com.lwc.qg.test.logbackDemo 對應的 logger 日誌級別設爲 warn,那麼將只會輸出 warn 及其以上的信息日誌

Alt text

 

root

root 也是 logger 元素,但它是根 logger。只有一個 level 屬性

 

appender

appender 是負責寫日誌的組件,經常使用的組件有:

  • ConsoleAppender
  • FileAppender
  • RollingFileAppender

 

ConsoleAppender

控制檯日誌組件,該組件將日誌信息輸出到控制檯,該組件有如下節點

  • encoder:對日誌進行格式化
  • target:System.out 或者 System.err,默認是 System.out
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
<target>System.out</target>
</appender>

 

FileAppender

文件日誌組件,該組件將日誌信息輸出到日誌文件中,該組件有如下節點

  • file:被寫入的文件名,能夠是相對路徑,也能夠是絕對路徑。若是上級目錄不存在會自動建立,沒有默認值
  • append:若是是 true,日誌被追加到文件結尾;若是是 false,清空現存文件,默認是 true。
  • encoder:格式化
  • prudent:若是是 true,日誌會被安全的寫入文件,即便其餘的 FileAppender 也在向此文件作寫入操做,效率低,默認是 false。
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>testFile.log</file>
<append>true</append>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
<prudent>true</prudent>
</appender>

 

RollingFileAppender

滾動記錄文件日誌組件,先將日誌記錄記錄到指定文件,當符合某個條件時,將日誌記錄到其餘文件,該組件有如下節點

  • file:文件名
  • encoder:格式化
  • rollingPolicy:當發生滾動時,決定 RollingFileAppender 的行爲,涉及文件移動和重命名
  • triggeringPolicy:告知 RollingFileAppender 合適激活滾動
  • prudent:當爲true時,不支持FixedWindowRollingPolicy。支持TimeBasedRollingPolicy,可是有兩個限制,1不支持也不容許文件壓縮,2不能設置file屬性,必須留空。

 

rollingPolicy

滾動策略

  1. TimeBasedRollingPolicy:最經常使用的滾動策略,它根據時間來制定滾動策略,即負責滾動也負責觸發滾動,包含節點:

    • fileNamePattern:文件名模式
    • maxHistoury:控制文件的最大數量,超過數量則刪除舊文件
  2. FixedWindowRollingPolicy:根據固定窗口算法重命名文件的滾動策略,包含節點

    • minInedx:窗口索引最小值
    • maxIndex:串口索引最大值,當用戶指定的窗口過大時,會自動將窗口設置爲12
    • fileNamePattern:文件名模式,必須包含%i,命名模式爲 log%i.log,會產生 log1.log,log2.log 這樣的文件
  3. triggeringPolicy:根據文件大小的滾動策略,包含節點

    • maxFileSize:日誌文件最大大小
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>

<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>

 

filter 過濾器

過濾器是用於日誌組件中的,每通過一個過濾器都會返回一個確切的枚舉值,分別是

  • DENY:返回 DENY,日誌將當即被拋棄再也不通過其餘過濾器
  • NEUTRAL:有序列表的下個過濾器接着處理日誌
  • ACCEPT:日誌會被當即處理,再也不通過剩餘過濾器

 

經常使用過濾器

經常使用的過濾器有如下:

  • LevelFilter 
    級別過濾器,根據日誌級別進行過濾。若是日誌級別等於配置級別,過濾器會根據 omMatch 和 omMismatch 接受或拒絕日誌。他有如下節點 
      level:過濾級別 
      onMatch:配置符合過濾條件的操做 
      onMismatch:配置不符合過濾條件的操做 
    例:該組件設置一個 INFO 級別的過濾器,那麼全部非 INFO 級別的日誌都會被過濾掉  
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
<target>System.out</target>
</appender>
  • ThresholdFilter 
    臨界值過濾器,過濾掉低於指定臨界值的日誌。當日志級別等於或高於臨界值時,過濾器會返回 NEUTRAL;當日志級別低於臨界值時,日誌會被拒絕 
    例:過濾掉全部低於 INFO 級別的日誌
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
<target>System.out</target>
</appender>
  • EvaluatorFilter 求值過濾器,評估、鑑別日誌是否符合指定條件,包含節點:   evaluator:鑑別器,經過子標籤 expression 配置求值條件   onMatch:配置符合過濾條件的操做   onMismatch:配置不符合過濾條件的操做
相關文章
相關標籤/搜索