sizeBasedTriggeringPolicy:基于文件大小的滚动策略
<Policies>
<SizeBasedTriggeringPolicy size="1KB"/>
Policies>
The SizeBasedTriggeringPolicy
causes a rollover once the file has reached the specified size
. 单位可为 KB, MB, GB, or TB, for example 20MB.
1、不与基于时间的触发策略结合使用时,基于大小的触发策略将导致时间戳值发生变化。
2、当与基于时间的触发策略结合使用时,文件模式必须包含%i
,否则目标文件将在每次滚动时被覆盖,因为基于大小的触发策略不会导致文件名中的时间戳值更改。 %i
就类似于一个整数计数器,受到
控制,当文件个数达到5个
的时候会循环覆盖
前面已归档的1-5个文件。若不设置该参数,默认为7
。
场景1:
<configuration status="info" monitorInterval="10">
<properties>
<property name="LOG_HOME">./applog/logsproperty>
<Property name="FILE_NAME" value="practisesvr"/>
<Property name="LOG_PATTERN" value="[%d{yyyy-MM-dd HH:mm:ss}] [%-5level] [%thread] [%file:%line] → [%enc{%m}{CRLF}]%n"/>
properties>
<appenders>
<RollingFile name="SIZE_BASED_TRIGGERING"
fileName="${LOG_HOME}/${FILE_NAME}.log"
filePattern="${LOG_HOME}/${FILE_NAME}_%d{yyyy-MM-dd}_%i.log.gz"
createOnDemand="true">
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>
<SizeBasedTriggeringPolicy size="1KB"/>
Policies>
<DefaultRolloverStrategy max="5"/>
RollingFile>
appenders>
<loggers>
<root level="all">
<AppenderRef ref="SIZE_BASED_TRIGGERING"/>
root>
loggers>
configuration>
上述模板中,日志先写入practisesvr.log
中,每当文件大小达到1KB
时,按照在./applog/logs
目录下以practisesvr_2023-04-02_1.log.gz
格式对该日志进行压缩重命名并归档
,并生成新的文件practisesvr.log
进行日志写入。
TimeBasedTriggeringPolicy:基于时间间隔的滚动策略
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
Policies>
The TimeBasedTriggeringPolicy
causes a rollover once the date/time pattern no longer applies to the active file
.
参数 | Type | Description |
---|---|---|
interval 间隔 |
integer | 控制归档频率,默认值为1,单位取自filePattern中配置的最小时间单位。 如:filePattern中最小时间单位为小时,如果interval=1,则1小时归档一次;如果interval=2,则2小时归档一次。 |
modulate 调整 |
boolean | 控制是否对interval进行调节,若为true,会以0 为开始对interval进行偏移计算。默认为false。例如,当单位为小时时,当前为3:00,interval为4,则后面归档时间依次为4:00,8:00,12:00,16:00 |
maxRandomDelay 最大随机延迟 |
integer | 指示随机延迟过渡的最大秒数。默认情况下,该值为0,表示没有延迟。 此设置在配置了多个应用程序以同时滚动日志文件的服务器上很有用,并且可以在整个时间上分散这样做的负担。 |
场景1:验证秒钟场景
<configuration status="info" monitorInterval="10">
<properties>
<property name="LOG_HOME">./applog/logsproperty>
<Property name="FILE_NAME" value="practisesvr"/>
<Property name="LOG_PATTERN" value="[%d{yyyy-MM-dd HH:mm:ss}] [%-5level] [%thread] [%file:%line] → [%enc{%m}{CRLF}]%n"/>
properties>
<appenders>
<RollingFile name="SIZE_BASED_TRIGGERING"
fileName="${LOG_HOME}/${FILE_NAME}.log"
filePattern="${LOG_HOME}/${FILE_NAME}_%d{yyyy-MM-dd-HH-mm-ss}_%i.log" createOnDemand="true">
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
Policies>
<DefaultRolloverStrategy max="5"/>
RollingFile>
appenders>
<loggers>
<root level="all">
<AppenderRef ref="SIZE_BASED_TRIGGERING"/>
root>
loggers>
configuration>
上述模板中,日志先写入practisesvr.log
中,每经过1s
时(因为filePattern中 {yyyy-MM-dd-HH-mm-ss}
最小时间单位为秒),按照在./applog/logs
目录下以practisesvr_yyyy-MM-dd-HH-mm-ss_i.log
格式对该日志进行压缩重命名并归档
,并生成新的文件practisesvr.log
进行日志写入。
场景2:验证分钟场景
modulate="false"
filePattern="${LOG_HOME}/${FILE_NAME}_%d{yyyy-MM-dd-HH-mm}_%i.log"
<TimeBasedTriggeringPolicy modulate="false" interval="5"/>
结果:
2023-11-27 13:26:18 :启动服务开始记录第一条日志
practisesvr_2023-11-27-13-30_1.log
2023-11-27 13:26:18 本日志文件开始时间
2023-11-27 13:30:59 本日志文件结束时间
practisesvr_2023-11-27-13-35_1.log
2023-11-27 13:31:00 本日志文件开始时间
2023-11-27 13:35:59 本日志文件结束时间
modulate="true"
filePattern="${LOG_HOME}/${FILE_NAME}_%d{yyyy-MM-dd-HH-mm}_%i.log"
<TimeBasedTriggeringPolicy modulate="true" interval="5"/>
结果:
2023-11-27 13:38:06:启动服务开始记录第一条日志
practisesvr_2023-11-27-13-39_1.log
2023-11-27 13:38:06 本日志文件:启动服务开始记录第一条日志
2023-11-27 13:39:59 本日志文件最后一条日志
practisesvr_2023-04-03-00-47_1.log
2023-11-27 13:40:00 本日志文件开始时间
2023-11-27 13:44:59 本日志文件结束时间
场景3:验证小时场景
modulate="true"
<configuration status="info" monitorInterval="10">
<properties>
<property name="LOG_HOME">./applog/logsproperty>
<Property name="FILE_NAME" value="practisesvr"/>
<Property name="LOG_PATTERN" value="[%d{yyyy-MM-dd HH:mm:ss}] [%-5level] [%thread] [%file:%line] → [%enc{%m}{CRLF}]%n"/>
properties>
<appenders>
<RollingFile name="SIZE_BASED_TRIGGERING"
fileName="${LOG_HOME}/${FILE_NAME}.log"
filePattern="${LOG_HOME}/${FILE_NAME}_%d{yyyy-MM-dd-HH}_%i.log"
createOnDemand="true">
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>
<TimeBasedTriggeringPolicy modulate="true" interval="3"/>
Policies>
<DefaultRolloverStrategy fileIndex = "nomax"/>
RollingFile>
appenders>
<loggers>
<root level="all">
<AppenderRef ref="SIZE_BASED_TRIGGERING"/>
root>
loggers>
configuration>
结果:
2023-04-03 08:56:19 启动服务开始记录第一条日志
practisesvr_2023-04-03-08_1.log
2023-04-03 08:56:19 本日志文件:启动服务开始记录第一条日志
2023-04-03 08:59:59 本日志文件最后一条日志
practisesvr_2023-04-03-11_1.log
2023-04-03 09:00:00 本日志文件开始时间
2023-04-03 11:59:59 本日志文件结束时间
如上modulate="true"
设置后,假如8点56分
的日志开始重启服务,日志先写入logs/app.log
中则9点
触发一次rollover操作{[0-3),[3-6),[6-9),[9-12)},生成practisesvr_2023-04-03-08_1.log
对该日志进行压缩重命名并归档
,并生成新的文件practisesvr.log进行日志写入
;然后,每间隔3小时
,则下一次是12点
触发一次rollover。
modulate="false"
filePattern="${LOG_HOME}/${FILE_NAME}_%d{yyyy-MM-dd-HH}_%i.log"
执行结果:
<TimeBasedTriggeringPolicy modulate="false" interval="3"/>
2023-04-03 13:50:34 启动服务开始记录第一条日志
practisesvr_2023-04-03-15_1.log
2023-04-03 13:50:34 启动服务开始记录第一条日志
2023-04-03 15:59:59 本日志文件结束时间
Composite Triggering Policy:基于时间间隔和文件大小的滚动策略
先满足哪个策略条件就基于哪个策略生成log文件
<configuration status="info" monitorInterval="10">
<properties>
<property name="LOG_HOME">./applog/logsproperty>
<Property name="FILE_NAME" value="practisesvr"/>
<Property name="LOG_PATTERN" value="[%d{yyyy-MM-dd HH:mm:ss}] [%-5level] [%thread] [%file:%line] → [%enc{%m}{CRLF}]%n"/>
properties>
<appenders>
<RollingFile name="SIZE_BASED_TRIGGERING"
fileName="${LOG_HOME}/${FILE_NAME}.log"
filePattern="${LOG_HOME}/${FILE_NAME}_%d{yyyy-MM-dd-HH}_%i.log.gz"
createOnDemand="true">
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>
<TimeBasedTriggeringPolicy modulate="true" interval="6"/>
<SizeBasedTriggeringPolicy size="100MB"/>
Policies>
<DefaultRolloverStrategy fileIndex = "nomax"/>
RollingFile>
appenders>
<loggers>
<root level="all">
<AppenderRef ref="SIZE_BASED_TRIGGERING"/>
root>
loggers>
configuration>
上述模板中,日志先写入practisesvr.log
中,每当文件大小达到100MB
或者当时间间隔到达6小时
(由%d{yyyy-MM-dd-HH}
决定),触发rollover操作,按照在./applog/logs
目录下以practisesvr_2023-04-03-11_1.log.gz
格式对该日志进行压缩重命名并归档,并生成新的文件practisesvr.log
进行日志写入。