1. 程式人生 > >Log4j2配置詳解

Log4j2配置詳解

一、背景

最近由於專案的需要,需要將日誌全部遷移成 log4j2 版本,之前對於專案日誌的配置總是似懂非懂,最近詳細整理了下知識點,本文就作為一個記錄來詳細記錄一下 log4j2 配置的相關知識點。

二、配置詳解

1、預設預設配置檔案

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
   <Appenders>
     <Console name="Console" target="SYSTEM_OUT">
       <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
     </Console>
   </Appenders>
   <Loggers>
     <Root level="error">
       <AppenderRef ref="Console"/>
     </Root>
   </Loggers>
</Configuration>

2、配置檔案節點說明

2.1、根節點Configuration:有 Appenders 和 Loggers 兩個子節點。

  • status:用來指定 log4j 本身列印日誌的級別。
  • monitorinterval:用於指定 log4j 自動重新配置的監測間隔時間,單位是秒(s),最小的間隔時間是5s。

2.2、Appenders 節點
有常見的 Console、RollingFile、File 三種子節點。

2.2.1、Console:用於定義輸出到控制檯的 Appender。

  • name:指定 Appender 的名字。
  • target:SYSTEM_OUT 或 SYSTEM_ERR,一般只設置預設:SYSTEM_OUT。
  • PatternLayout:輸出格式,不設定預設為 %m%n。

2.2.2、File:用於定義輸出到指定位置的檔案的 Appender。

  • name:指定 Appender 的名字。
  • fileName:指定輸出日誌的目的檔案帶全路徑的檔名。
  • PatternLayout:輸出格式,不設定預設為 %m%n。

2.2.3、RollingFile:定義指定方式觸發新的 Appender。

  • name:Appender 名字。
  • fileName:輸出日誌檔案的名字(帶全路徑)。
  • filePattern:歸檔日誌檔案的檔名模式。
  • PatternLayout:輸出格式,不設定預設為:%m%n。
  • Policies:指定滾動日誌的策略。
  • TimeBasedTriggeringPolicy:Policies 子節點,基於時間的滾動策略。interval 屬性根據日期模式中最具體的時間單位進行翻轉的頻率,預設為1。
  • SizeBasedTriggeringPolicy:Policies 子節點,基於檔案大小的滾動策略。size屬性用來定義每個日誌檔案的大小。大小可以以位元組為單位指定,字尾為KB,MB或GB,例如20MB。
  • DefaultRolloverStrategy:用來指定同一資料夾最多有幾個日誌檔案時開始刪除最舊的,建立新的(通過max屬性)。

2.3、Loggers 節點
常見的有 Root 和 Logger 兩種節點。

2.3.1、Root:指定專案的根日誌,如果沒有單獨指定 Logger,那麼預設使用該 Root 日誌輸出。

  • level:日誌的輸出級別,共8個級別,按照從低到高為 All < Trace < Debug < Info < Warn < Error < Fatal < OFF。
  • AppenderRef:Root 的子節點,用來指定該日誌輸出到哪個 Appender。

2.3.2、Logger:用來單獨指定日誌的形式。

  • level:日誌的輸出級別,與 Root 一致。
  • name:用來指定該Logger所適用的類或者類所在的包全路徑,繼承自Root節點。
  • AppenderRef:Logger的子節點,用來指定該日誌輸出到哪個Appender,如果沒有指定,就會預設繼承自Root.如果指定了,那麼會在指定的這個Appender和Root的Appender中都會輸出,此時我們可以設定Logger的additivity="false"只在自定義的Appender中進行輸出。

3、配置模板

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">

    <!--全域性引數-->
    <Properties>
        <Property name="pattern">%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n</Property>
        <Property name="logDir">/data/logs/dust-server</Property>
    </Properties>

    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="console"/>
            <AppenderRef ref="rolling_file"/>
        </Root>
    </Loggers>

    <Appenders>
        <!-- 定義輸出到控制檯 -->
        <Console name="console" target="SYSTEM_OUT" follow="true">
            <!--控制檯只輸出level及以上級別的資訊-->
            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout>
                <Pattern>${pattern}</Pattern>
            </PatternLayout>
        </Console>
        <!-- 同一來源的Appender可以定義多個RollingFile,定義按天儲存日誌 -->
        <RollingFile name="rolling_file"
                     fileName="${logDir}/dust-server.log"
                     filePattern="${logDir}/dust-server_%d{yyyy-MM-dd}.log">
            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout>
                <Pattern>${pattern}</Pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1"/>
            </Policies>
            <!-- 日誌保留策略,配置只保留七天 -->
            <DefaultRolloverStrategy>
                <Delete basePath="${logDir}/" maxDepth="1">
                    <IfFileName glob="dust-server_*.log" />
                    <IfLastModified age="7d" />
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>
    </Appenders>
</Configuration>