Log4j2的Policies详解

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进行日志写入。

Log4j2的Policies详解_第1张图片

场景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 本日志文件结束时间

Log4j2的Policies详解_第2张图片

场景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进行日志写入。

你可能感兴趣的:(日志,log4j,缓存)