Log4j2配置詳解
阿新 • • 發佈:2019-02-08
一、背景
最近由於專案的需要,需要將日誌全部遷移成 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>