1.說明
本文提供完整的log4j2.xml配置文件,
供開發中參考使用,可以作為模板,
配置對應實現如下常用的功能:
1.自動檢測和重新加載配置,每10分鍾(600s)檢測一次
2.每個日志文件最大為100MB
3.每天備份一次日志文件
4.備份的日志文件壓縮為gz格式
5.備份的文件放到以當前年月命名的目錄
6.每天備份的日志文件個數最多為5個
7.最多保留6個月(180D)之內的日志文件
2.完整log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--status:Log4j2內部日志的輸出級別,設置為TRACE對學習Log4j2非常有用 -->
<!--monitorInterval:定時檢測配置文件的修改,有變化則自動重新加載配置,時間單位為秒,最小間隔為5s -->
<Configuration status="WARN" monitorInterval="600">
<!--properties:設置全局變量 -->
<properties>
<!--LOG_HOME:指定當前日志存放的目錄 -->
<property name="LOG_HOME">logs</property>
<!--FILE_NAME:指定日志文件的名稱 -->
<property name="FILE_NAME">test</property>
</properties>
<!--Appenders:定義日志輸出目的地,內容和格式等 -->
<Appenders>
<!--Console:日志輸出到控制台標准輸出 -->
<Console name="Console" target="SYSTEM_OUT">
<!--pattern:日期,線程名,日志級別,日志名稱,日志信息,換行 -->
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level [%L] - %msg%n" />
</Console>
<!--RollingFile:日志輸出到文件,下面的文件都使用相對路徑 -->
<!--fileName:當前日志輸出的文件名稱 -->
<!--filePattern:備份日志文件名稱,備份目錄為logs下面以年月命名的目錄,備份時使用gz格式壓縮 -->
<RollingFile name="RollingFile" fileName="${LOG_HOME}/${FILE_NAME}.log"
filePattern="${LOG_HOME}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level [%L] - %msg%n" />
<!--Policies:觸發策略決定何時執行備份 -->
<Policies>
<!--TimeBasedTriggeringPolicy:日志文件按照時間備份 -->
<!--interval:每1天生成一個新文件,時間單位需要結合filePattern時間%d{yyyy-MM-dd} -->
<!--同理,如果要每1小時生成一個新文件,則改成%d{yyyy-MM-ddHH} -->
<!--modulate:對備份日志的生成時間糾偏,糾偏以0為基准進行,"0+interval"決定啟動后第一次備份時間 -->
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
<!--SizeBasedTriggeringPolicy:日志文件按照大小備份 -->
<!--size:指定日志文件最大為100MB,單位可以為KB、MB或GB -->
<SizeBasedTriggeringPolicy size="100MB" />
</Policies>
<!--DefaultRolloverStrategy:翻轉策略決定如何執行備份 -->
<!--max:最多保存5個備份文件,結合時間使用后,在每個時間段內最多有5個備份,多出來的會被覆蓋 -->
<!--compressionLevel:配置日志壓縮級別,范圍0-9,0不壓縮,1壓縮速度最快,9壓縮率最好,目前只對於zip壓縮文件類型有效 -->
<DefaultRolloverStrategy max="5" compressionLevel="1">
<!--Delete:刪除匹配到的過期備份文件 -->
<!--maxDepth:由於備份文件保存在${LOG_HOME}/$${date:yyyy-MM},所以目錄深度設置為2 -->
<Delete basePath="${LOG_HOME}" maxDepth="2">
<!--IfFileName:匹配文件名稱 -->
<!--glob:匹配2級目錄深度下的以.log.gz結尾的備份文件 -->
<IfFileName glob="*/*.log.gz" />
<!--IfLastModified:匹配文件修改時間 -->
<!--age:匹配超過180天的文件,單位D、H、M、S分別表示天、小時、分鍾、秒-->
<IfLastModified age="180D" />
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
</Appenders>
<!--Loggers:定義日志級別和使用的Appenders -->
<Loggers>
<!--name: 打印日志的類的包路徑 -->
<!--additivity: true當前的Logger打印的日志附加到Root,false僅僅打印到RollingFile -->
<Logger name="org.apache.logging.log4j" level="ERROR" additivity="true">
<AppenderRef ref="RollingFile" />
</Logger>
<!--Root:日志默認打印到控制台 -->
<!--level日志級別: ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF -->
<Root level="ERROR">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
3.參考文章
Log4j2基本使用入門
Log4j2進階使用(按大小時間備份日志)
Log4j2進階使用(Pattern Layout詳細設置)