Log4j 2
配置
可以自動加載配置,配置文件包括四種格式:properties,yml,json,xml,配置文件優先級依次為 log4j2.configurationFile > log4j2-test.properties > log4j2-test.yaml或log4j2-test.yml > log4j2-test.json或log4j2-test.jsn > log4j2-test.xml > log4j2.properties > log4j2.yaml或log4j2.yml > log4j2.json或log4j2.jsn > log4j2.xml > DefaultConfiguration
,配置文件需要放在classpath路徑下
配置文件示例
在實際項目中用過properties和xml格式,yml和json沒用過
log4j2.properties
# 名稱
name=PropertiesConfig
# 全局日志級別
status=INFO
# 過濾器
# 過濾器類型
filter.threshold.type = ThresholdFilter
# 過濾級別
filter.threshold.level = debug
# console
# 指定輸出源的類型與名稱
appender.console.type=Console
appender.console.name=Console
appender.console.layout.type=PatternLayout
# 輸出模板
appender.console.layout.pattern=%d%p[%c]-%m%n
# rolling file
appender.rolling.type=RollingFile
appender.rolling.name=RollingFile
appender.rolling.fileName=logs/properties.log
# 指定當發生Rolling時,文件的轉移和重命名規則
appender.rolling.filePattern=logs/properties.%d{YYYYMMdd}.log
appender.rolling.layout.type=PatternLayout
appender.rolling.layout.pattern=%d%p[%c]-%m%n
# 指定記錄文件的封存策略,該策略主要是完成周期性的日志文件封存工作
appender.rolling.policies.type=Policies
# 基於時間的觸發策略
appender.rolling.policies.time.type=TimeBasedTriggeringPolicy
# 當前記錄周期為每天生成一個文件
appender.rolling.policies.time.interval=1
# 設置是否按小時來計算封存周期,否則以文件名格式
appender.rolling.policies.time.modulate = false
# 含有包含關系的類包,被子包的需要放在父包前面
loggers=org.hibernate.util.JDBCExceptionReporter,org.hibernate
logger.org.hibernate.util.JDBCExceptionReporter.name=org.hibernate.util.JDBCExceptionReporter
logger.org.hibernate.util.JDBCExceptionReporter.level=OFF
logger.org.hibernate.util.JDBCExceptionReporter.appenderRef.stdout.ref=Console
logger.org.hibernate.util.JDBCExceptionReporter.appenderRef.rolling.ref=RollingFile
logger.org.hibernate.util.JDBCExceptionReporter.additivity=false
logger.org.hibernate.name=org.hibernate
logger.org.hibernate.level=FATAL
logger.org.hibernate.appenderRef.stdout.ref=Console
logger.org.hibernate.appenderRef.rolling.ref=RollingFile
logger.org.hibernate.additivity=false
# rootLogger, 根記錄器,所有記錄器的父輩
# 指定根日志的級別
rootLogger.level=info
# 指定輸出的appender引用
rootLogger.appenderRef.stdout.ref=Console
rootLogger.appenderRef.rolling.ref=RollingFile
log4j2.yml
Configuration:
status: warn
name: YAMLConfigTest
properties:
property:
name: filename
value: target/test-yaml.log
thresholdFilter:
level: debug
appenders:
Console:
name: STDOUT
target: SYSTEM_OUT
PatternLayout:
Pattern: "%m%n"
File:
name: File
fileName: ${filename}
PatternLayout:
Pattern: "%d %p %C{1.} [%t] %m%n"
Filters:
ThresholdFilter:
level: error
Loggers:
logger:
-
name: org.apache.logging.log4j.test1
level: debug
additivity: false
ThreadContextMapFilter:
KeyValuePair:
key: test
value: 123
AppenderRef:
ref: STDOUT
-
name: org.apache.logging.log4j.test2
level: debug
additivity: false
AppenderRef:
ref: File
Root:
level: error
AppenderRef:
ref: STDOUT
log4j2.json
{ "configuration": { "status": "debug", "name": "RoutingTest",
"packages": "org.apache.logging.log4j.test",
"properties": {
"property": { "name": "filename",
"value" : "target/rolling1/rollingtest-$${sd:type}.log" }
},
"ThresholdFilter": { "level": "debug" },
"appenders": {
"appender": [
{ "type": "Console", "name": "STDOUT", "PatternLayout": { "pattern": "%m%n" }, "ThresholdFilter": { "level": "debug" }},
{ "type": "Routing", "name": "Routing",
"Routes": { "pattern": "$${sd:type}",
"Route": [
{
"RollingFile": {
"name": "Rolling-${sd:type}", "fileName": "${filename}",
"filePattern": "target/rolling1/test1-${sd:type}.%i.log.gz",
"PatternLayout": {"pattern": "%d %p %c{1.} [%t] %m%n"},
"SizeBasedTriggeringPolicy": { "size": "500" }
}
},
{ "AppenderRef": "STDOUT", "key": "Audit"}
]
}
}
]
},
"loggers": {
"logger": [
{ "name": "EventLogger", "level": "info", "additivity": "false",
"AppenderRef": { "ref": "Routing" }},
{ "name": "com.foo.bar", "level": "error", "additivity": "false",
"AppenderRef": { "ref": "STDOUT" }}
],
"root": { "level": "error", "AppenderRef": { "ref": "STDOUT" }}
}
}
}
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--日志級別以及優先級排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,這個用於設置log4j2自身內部的信息輸出,可以不設置,當設置成trace時,你會看到log4j2內部各種詳細輸出-->
<!--monitorInterval:Log4j能夠自動檢測修改配置 文件和重新配置本身,設置間隔秒數-->
<configuration status="WARN" monitorInterval="30">
<!--先定義所有的appender-->
<appenders>
<!--這個輸出控制台的配置-->
<console name="Console" target="SYSTEM_OUT">
<!--輸出日志的格式-->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n" />
</console>
<!--文件會打印出所有信息,這個log每次運行程序會自動清空,由append屬性決定,這個也挺有用的,適合臨時測試用-->
<File name="log" fileName="log/test.log" append="false">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" />
</File>
<!-- 這個會打印出所有的info及以下級別的信息,每次大小超過size,則這size大小的日志會自動存入按年份-月份建立的文件夾下面並進行壓縮,作為存檔-->
<RollingFile name="RollingFileInfo" fileName="${sys:user.home}/logs/info.log" filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
<!--控制台只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch)-->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n" />
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="100 MB" />
</Policies>
</RollingFile>
<RollingFile name="RollingFileWarn" fileName="${sys:user.home}/logs/warn.log" filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
<ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY" />
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n" />
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="100 MB" />
</Policies>
<!-- DefaultRolloverStrategy屬性如不設置,則默認為最多同一文件夾下7個文件,這里設置了20 -->
<DefaultRolloverStrategy max="20" />
</RollingFile>
<RollingFile name="RollingFileError" fileName="${sys:user.home}/logs/error.log" filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" />
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n" />
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="100 MB" />
</Policies>
</RollingFile>
</appenders>
<!--然后定義logger,只有定義了logger並引入的appender,appender才會生效-->
<loggers>
<!--過濾掉spring和mybatis的一些無用的DEBUG信息-->
<logger name="org.springframework" level="INFO"></logger>
<logger name="org.mybatis" level="INFO"></logger>
<root level="all">
<appender-ref ref="Console" />
<appender-ref ref="RollingFileInfo" />
<appender-ref ref="RollingFileWarn" />
<appender-ref ref="RollingFileError" />
</root>
</loggers>
</configuration>
配置參數
appender組件列表
append | 描述 |
---|---|
AsyncAppender | 用於接受其他類型appender的引用,並使用單獨線程異步寫入log |
CassandraAppender | 將日志寫入Cassandra數據庫中,需要提前建立keyspace和table |
ConsoleAppender | 其日志寫入System.out或System.err,默認為System.out |
FailoverAppender | 故障轉移appender,可以指定主appender,並且包含一組appender集合,當主appender寫入失敗,則會依次使用其他append寫入,直至寫入成功或者全部appender寫入失敗 |
FileAppender | 將日志寫入文件,使用FileManager執行io |
FlumeAppender | 將日志序列化后發送給Flume代理。 可選組件,由單獨的jar提供。 |
JDBCAppender | 使用標准JDBC將日志寫入關系數據庫表,必須使用連接池 |
JMS Appender | 將日志發送至JMS中 |
JPAAppender | 通過JPA將日志寫入關系型數據庫表,需要有單獨的persistence.xml配置文件 |
HttpAppender | 通過http請求發送日志,使用HttpURLConnection實現,響應2XX狀態碼為成功,否則拋出異常 |
KafkaAppender | 將日志事件發送到Kafka的topic中 |
MemoryMappedFileAppender | 2.1新增功能,將指定日志文件的一部分映射至內存,並將新日志事件寫入此內存,達到閾值時將此內存刷新至存儲設備 |
NoSQLAppender | 使用內部輕量級Provider接口將日志事件寫入NoSQL數據庫。目前只有MongoDB和Apache CouchDB的Provider實現 |
NoSQLAppender for MongoDB | 2.0.11開始,提供兩個MongoDB模塊:log4j-mongodb2、log4j-mongodb3 |
NoSQLAppender for MongoDB 2 | 使用MongoDB驅動程序版本2將日志寫入MongoDB中 |
NoSQLAppender for MongoDB 3 | 使用MongoDB驅動程序版本3將日志寫入MongoDB中 |
NoSQLAppender for Apache CouchDB | 使用內部輕量級Provider將日志寫入CouchDB中 |
OutputStreamAppender | OutputStreamAppender不能直接配置,只是作為基礎組件提供給其他Appender使用,如可以將日志事件寫入輸出流的File和Socket |
RandomAccessFileAppender | 與FileAppender相比,使用的I/O實現類不同,FileAppender使用FileOutputStream,RandomAccessFileAppender 使用RandomAccessFile。bufferedIO=true(默認是true)時,性能提高20-200% 。 |
RewriteAppender | 用於在日志被其他Appender寫入文件之前,通過RewritePolicy修改日志事件 |
RollingFileAppender | 將日志寫入文件,並根據TriggeringPolicy和RolloverPolicy規則將文件歸檔、清理 |
RollingRandomAccessFileAppender | 與RollingFileAppender相比,使用的I/O實現類不同,RollingFileAppender使用FileOutputStream,RollingRandomAccessFileAppender使用RandomAccessFile。bufferedIO=true(默認是true)時,性能提高20-200% 。 |
RoutingAppender | 配置不同的規則,將日志路由到不同的Appender進行輸出 |
SMTPAppender | 發生指定日志事件時,發送電子郵件 |
ScriptAppenderSelector | 根據Script腳本的執行結果來選擇AppenderSet中配置的Appender,並將結果輸出至ScriptAppenderSelector的name中 |
SocketAppender | 通過tcp或者udp,將日志寫入遠程目標中 |
SyslogAppender | SyslogAppender是一個SocketAppender,它將其輸出以符合BSD Syslog或RFC 5424格式的日志寫入到遠程目標 |
ZeroMQ/JeroMQ Appender | ZeroMQ Appender使用JeroMQ庫將日志事件發送到一個或多個ZeroMQ端點 |
ConsoleAppender
ConsoleAppender比較簡單,就是把日志寫入System.out或者System.err中,基本配置如下:
Console一般使用基本配置就可以,唯一要注意的就是輸出格式pattern,pattern的配置釋義如下:
參數 | 描述 |
---|---|
%c或%logger | 輸出logName,如 Logger log = LoggerFactory.getLogger(“com.test.logName”); 則輸出為“com.test.logName” ,如果格式為%c{參數},則輸出內容參考官網:![]() |
%C或%class | 輸出為所在類的全路徑名 |
d{pattern}或date | 輸出時間,其中pattern可以是保留字,也可以是SimpleDateFormat中的字符。如 %d{DEFAULT} --> 2012-11-02 14:34:02,781 %d{DEFAULT_MICROS} --> 2012-11-02 14:34:02,123456 %d{yyyy-MM-dd HH:mm:ss.SSS} --> 2020-03-31 23:25:13.321 詳見log4j PatternLayout |
%F或%file | 輸出所在類名.java,如所在類為com.test.LogTest,則輸出為LogTest.java |
%l | 輸出錯誤的完整位置,全路徑類名.方法名(類名.java:行號),如,com.test.LogTest.testLog(LogTest.java:31) |
%L | 輸出行號 |
%m或%msg或%message | 輸出log.error(text)中的text內容 |
%M或%method | 輸出方法名 |
%n | 換行符 |
%t或%thread | 輸出線程名 |
%u{“RANDOM”| “TIME”}或uuid | 輸出uuid |
%sn或%sequenceNumber | 輸出自增序列 |
%r或%relative | 輸出從JVM啟動到當前時刻的毫秒數 |
%T或%tid或%threadId | 輸出線程id |
%t或%tn或%thread或%threadName | 輸出線程id |
%tp或%threadPriority | 輸出線程優先級 |
RollingFileAppender
RollingFileAppender是一個OutputStreamAppender,可以根據TriggeringPolicy和RolloverPolicy將文件切割歸檔,通過RollingFileManager(擴展了OutputStreamManager)來實際執行文件I / O並執行歸檔。參數如下:
參數 | 類型 | 描述 |
---|---|---|
append | boolean | 默認為true。如果為true,記錄將附加到文件末尾。設置為false時,將在寫入新記錄之前清除文件 |
bufferedIO | boolean | 默認為true。如果為true,數據先寫入緩沖區,如果緩沖區滿或者immediateFlush 為true時,數據才被寫入磁盤,如果為false直接寫入磁盤。文件鎖定不能與bufferedIO一起使用 |
bufferSize | int | 緩沖區大小。bufferedIO為true時,此參數有效,默認為8192 bytes |
createOnDemand | boolean | 默認為false。按需創建文件。僅當日志事件通過所有Filter並且路由到該append時,append才創建文件 |
filter | Filter | 確定事件是否應由此Appender處理,通過CompositeFilter(對應標簽為)可以使用多個過濾器 |
fileName | String | 要寫入的文件名,如果不存在或者父目錄不存在,則創建對應的文件或目錄 |
filePattern | String | 歸檔文件的模式,取決於所使用的RolloverPolicy |
immediateFlush | boolean | 默認為true。如果為true,每次寫操作后都會將數據刷新入磁盤,可能會影響性能。 每次寫入后刷新僅在使用同步appender時才有用。即使設置為false,異步appender也將在一批事件結束后自動刷新,這也可以確保效率更高的將數據寫入磁盤。 |
layout | Layout | 格式化日志輸出格式。如果未設置,則默認為’%m%n’ |
name | String | append名稱 |
policy | TriggeringPolicy | 用於確定歸檔的觸發條件 |
strategy | RolloverStrategy | 用於確定歸檔的文件名稱、路徑及歸檔方式 |
ignoreExceptions | boolean | 默認為true。設置為true時,如果記錄日志發生異常,此條日志和異常將被忽略。設置為false時,異常將被拋出到調用方。如果此append用在FailoverAppender中,則必須設置為false。 |
filePermissions | String | 創建文件時指定文件的rwx權限,前提是文件系統應支持POSIX文件屬性視圖 |
fileOwner | String | 文件所有者。出於安全原因,更改文件的所有者可能受到限制,並且不允許操作時會拋出IOException。 如果_POSIX_CHOWN_RESTRICTED對路徑有效,則只有有效用戶ID等於文件用戶ID或具有適當特權的進程才可以更改文件的所有權,前提是文件系統應支持文件所有者屬性視圖 |
fileGroup | String | 文件組。,前提是文件系統應支持POSIX文件屬性視圖 |
TriggeringPolicy
TriggeringPolicy是控制日志文件歸檔的觸發條件。總共有四種類型的TriggeringPolicy,可以組合(CompositeTriggeringPolicy)多種觸發策略來控制歸檔,標簽為,如果配置了多種策略,則只要有一種策略返回true,就返回true。
<Policies>
<!-- <CronTriggeringPolicy schedule="0 0 * * * ?"/> -->
<OnStartupTriggeringPolicy minSize="2" />
<SizeBasedTriggeringPolicy size="20 MB" />
<TimeBasedTriggeringPolicy /></Policies>
四種類型如下:
- OnStartupTriggeringPolicy
如果日志文件的時間比JVM的啟動時間早,或者達到minSize的值,則會觸發歸檔。
minSize:觸發文件歸檔的最小值,默認為1。 - SizeBasedTriggeringPolicy
當文件達到指定大小后,觸發歸檔。大小可以通過size指定,單位為KB、MB、GB。與TimeBasedTriggeringPolicy配合使用時,filePattern中必須包含%i,否則文件每次歸檔時都會覆蓋當前文件,因為TimeBasedTriggeringPolicy不會讓文件名中的時間戳改變。如果不使用TimeBasedTriggeringPolicy,則SizeBasedTriggeringPolicy會讓時間戳改變。 - TimeBasedTriggeringPolicy
當前時間與當前日志文件時間不匹配時,TimeBasedTriggeringPolicy會觸發歸檔。參數如下:
參數 | 描述 |
---|---|
interval | 基於filePattern中配置的最小時間單位進行來控制歸檔頻率,默認值為1。如:filePattern中最小時間單位為小時,如果interval=1,則1小時歸檔一次;如果interval=2,則2小時歸檔一次。 |
modulate | 默認為false。指明是否對interval進行調節,若modulate為true,會以0為開始對interval進行偏移計算。例如,最小時間粒度為小時,當前為3:00,interval為4,則后面歸檔時間依次為4:00,8:00,12:00,16:00 |
maxRandomDelay | 指示隨機延遲過渡的最大秒數。默認情況下,該值為0,表示沒有延遲。此設置在配置了多個應用程序以同時滾動日志文件的服務器上很有用,並且可以在整個時間上分散這樣做的負擔。 |
- CronTriggeringPolicy
基於cron表達式觸發歸檔。此策略由計時器控制,並且與處理日志事件異步,因此上一個或下一個時間段的日志事件可能會出現在當前日志文件的開頭或結尾。filePattern屬性應包含一個時間戳,否則目標文件將在每次歸檔時被覆蓋。參數如下:
參數 | 描述 |
---|---|
schedule | cron表達式,該表達式與Quartz調度程序中允許的表達式相同。詳見CronExpression |
EvaluationOnStartup | 啟動時,將根據文件的最后修改時間戳評估cron表達式。如果cron表達式指示應該在該時間和當前時間之間歸檔,則文件將立即被歸檔。 |
RolloverPolicy
用來控制文件歸檔方式,目前有兩種類型:DefaultRolloverStrategy和DirectWriteRolloverStrategy
DefaultRolloverStrategy
通過接收filePattern屬性中日期/時間模式(%d)和整數(%i)來控制歸檔方式。如果存在日期/時間模式,則將在歸檔時使用當前時間替換filePattern中配置的日期/時間部分,如果模式包含整數,則它將在每次歸檔時遞增。如果歸檔時在模式中同時包含日期/時間和整數,則整數將遞增,直到日期/時間部分也將被替換。如果文件模式以“ .gz”,“.zip”,“.bz2”,“.deflate”,“.pack200”或“ .xz”結尾,則將使用與后綴匹配的壓縮方案來壓縮文件。 bzip2, Deflate, Pack200 and XZ格式要求有Apache Commons Compress組件,另外xz格式還要求有XZ for Java組件。
DefaultRolloverStrategy參數如下:
參數 | 描述 |
---|---|
fileIndex | 默認值為max。可選值為:min、max,2.8之后新增nomax。文件歸檔及新文件創建規則后面介紹。 |
min | 計數器的最小值。預設值為1。 |
max | 計數器的最大值。一旦達到此值,較舊的歸檔文件將在以后的轉換中被刪除。預設值為7。 |
compressionLevel | 將壓縮級別設置為0-9,其中0 =無,1 =最佳速度,直到9 =最佳壓縮。僅針對ZIP文件實現 |
tempCompressedFilePattern | 壓縮期間歸檔日志文件的文件名的模式。 |
fileIndex設值不同,則文件歸檔及新文件創建及計數器遞增方法都不同,計數器遞增有三種方式,如下:
- 方式一:fileIndex值為max
假設將DefaultRolloverStrategy的min屬性設置為1,將max屬性設置為3,fileName是“ foo.log”,filePattern是“ foo-%i.log”,歸檔規則如下:
歸檔數 | 當前日志文件 | 歸檔文件 | 描述 |
---|---|---|---|
0 | foo.log | - | 所有日志記錄都將轉到初始文件 |
1 | foo.log | foo-1.log | 第一次歸檔,foo.log重命名為foo-1.log。創建新的foo.log文件並繼續寫入 |
2 | foo.log | foo-2.log,foo-1.log | 第二次歸檔,foo.log重命名為foo-2.log。創建新的foo.log文件並繼續寫入 |
3 | foo.log | foo-3.log,foo-2.log,foo-1.log | 第三次歸檔,foo.log重命名為foo-3.log。創建新的foo.log文件並繼續寫入 |
4 | foo.log | foo-3.log,foo-2.log,foo-1.log | 第四次和隨后的歸檔,foo-1.log被刪除,foo-2.log被重命名為foo-1.log,foo-3.log被重命名為foo-2.log,foo.log被重命名為foo-3.log。創建新的foo.log文件並繼續寫入。 |
- 方式二:fileIndex值為min
假設將DefaultRolloverStrategy的min屬性設置為1,將max屬性設置為3,fileName是“ foo.log”,filePattern是“ foo-%i.log”,歸檔規則如下:
歸檔數 | 當前日志文件 | 歸檔文件 | 描述 |
---|---|---|---|
0 | foo.log | - | 所有日志記錄都將轉到初始文件 |
1 | foo.log | foo-1.log | 第一次歸檔,foo.log重命名為foo-1.log。創建新的foo.log文件並繼續寫入 |
2 | foo.log | foo-1.log,foo-2.log | 第二次歸檔,將foo-1.log重命名為foo-2.log,並將foo.log重命名為foo-1.log。創建新的foo.log文件並繼續寫入 |
3 | foo.log | foo-1.log,foo-2.log,foo-3.log | 第三次歸檔,將foo-2.log重命名為foo-3.log,將foo-1.log重命名為foo-2.log,將foo.log重命名為foo-1.log。創建新的foo.log文件並繼續寫入 |
4 | foo.log | foo-1.log,foo-2.log,foo-3.log | 第四次和隨后的歸檔,刪除foo-3.log,將foo-2.log重命名為foo-3.log,將foo-1.log重命名為foo-2.log,將foo.log重命名為foo -1.log。創建新的foo.log文件並繼續寫入。 |
- 方式三:fileIndex值為nomax
nomax為2.8新增屬性,設置為nomax時,將忽略DefaultRolloverStrategy的最大值和最小值,每次歸檔生成的新文件相對於前一個文件編號加1,沒有最大文件數限制。
DirectWriteRolloverStrategy
將日志事件直接寫入由filePattern表示的文件。使用此策略文件不會執行重命名。如果是基於大小的觸發策略,將在指定的時間段內寫入多個文件,它們從1開始編號,並不斷遞增直到發生基於時間歸檔。
注意:如果filePattern的后綴表示應該進行壓縮,則在關閉應用程序時不會壓縮當前文件。此外,如果時間更改使得filePattern不再與當前文件匹配,則啟動時也不會對其進行壓縮。
DirectWriteRolloverStrategy模式參數如下:
參數 | 描述 |
---|---|
maxFiles | 與文件格式匹配的時間段內允許的最大文件數。如果超出文件數量,則最早的文件將被刪除。如果指定,則該值必須大於1。如果該值小於零或省略,則文件數量將不受限制。 |
compressionLevel | 將壓縮級別設置為0-9,其中0 =無,1 =最佳速度,直到9 =最佳壓縮。僅針對ZIP文件實現。 |
tempCompressedFilePattern | 壓縮期間歸檔日志文件的文件名的模式。 |
歸檔保留策略
DefaultRolloverStrategy模式下,Log4j-2.5引入了Delete(刪除)操作(標簽為),與 max屬性所提供的功能相比,Log4j-2.5使用戶可以更好地控制在歸檔時刪除哪些文件。刪除操作使用戶可以配置一個或多個條件,以選擇要相對於基本目錄刪除的文件。
注意:可以刪除任何文件,而不僅僅是刪除日志文件,因此請謹慎使用此操作!使用testMode參數,可以測試配置,而不會意外刪除錯誤的文件。
delete參數如下:
參數 | 描述 |
---|---|
basePath | 必需。從此處開始掃描要刪除的文件的基本路徑。 |
maxDepth | 要訪問的目錄的最大級別數。值為0表示僅訪問起始文件,除非安全管理器拒絕。Integer.MAX_VALUE的值指示應訪問所有級別。默認值為1,表示僅指定基本路徑中的文件。 |
followLinks | 是否遵循符號鏈接。默認為false。 |
testMode | 如果為true,則不會刪除文件,而是在INFO級別打印一條消息到狀態記錄器。使用此功能可以測試配置是否按預期工作。默認為false。 |
pathSorter | 一個實現PathSorter 接口的插件, 用於在選擇要刪除的文件之前對文件進行排序。默認設置是首先對最近修改的文件進行排序。 |
pathConditions | 如果未指定ScriptCondition,則為必需。可以指定一個或多個PathCondition元素。如果指定了多個PathCondition元素,則需要所有的PathCondition結果都為true才會進行刪除。PathCondition也可以嵌套。如果進行嵌套,則是先判斷外層的PathCondition,然后進行內層的判斷。如果沒有嵌套,則是按順序進行判斷。也可以創建自定義條件或使用內置條件:IfFileName 如果文件名與此參數匹配則結果為true,此參數為正則表達式或 glob的文件。IfLastModified 最后修改時間早於或等於此參數則結果為true,此參數為duration。IfAccumulatedFileCount 文件數超過指定個數則結果為true,此參數為整型。IfAccumulatedFileSize 所有文件總大小達到此參數則結果為true,此參數為KB、MB、GB。IfAll 如果此標簽下的所有條件都配置成功(邏輯與),則結果為true。IfAny 如果此標簽下的任何一個條件匹配成功(邏輯或),則結果為true。IfNot 如果此標簽下的所有條件都不匹配(邏輯非),則結果為true。 |
scriptCondition | 如果未指定PathConditions,則為必需。指定腳本的ScriptCondition元素。ScriptCondition應該包含一個Script,ScriptRef或ScriptFile元素,該元素指定要執行的邏輯。(有關配置ScriptFiles和ScriptRefs的更多示例,另請參閱ScriptFilter文檔。)該腳本傳遞了許多參數,包括在basePath下找到的路徑列表(最大maxDepth),並且必須返回包含要刪除的路徑的列表。 |