logger 配置文件詳解


Logback配置文件詳解

Logback,Java 日志框架。

Logback 如何加載配置的

  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 修改上下文名稱,用於區分不同應該程序的記錄

<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 有三個屬性

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

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

        <!-- 根 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 依次傳遞,所以按理來說一個打印信息將會打印四次

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:配置不符合過濾條件的操作


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM