Log4j2的DefaultRolloverStrategy详解

什么是 DefaultRolloverStrategy?

当触发器(例如SizeBasedTriggeringPolicyTimeBasedTriggeringPolicy)决定需要进行日志文件滚动时,DefaultRolloverStrategy将负责处理滚动过程中的具体行为。

<RollingFile name="api_json"
             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>
        <SizeBasedTriggeringPolicy size="100K"/>
    </Policies>

    <DefaultRolloverStrategy fileIndex="nomax">
        <Delete basePath="${LOG_HOME}" maxDepth="2">
            <IfFileName glob="*.log.gz">
                <IfAny>
                    <IfAccumulatedFileSize exceeds="100M"/>
                    <IfAccumulatedFileCount exceeds="100"/>
                    <IfLastModified age="30d"/>
                </IfAny>
            </IfFileName>
        </Delete>
    </DefaultRolloverStrategy>
</RollingFile>

DefaultRolloverStrategy节点

参数TypeDescription
fileIndexString可选值 max, min,nomax
max:删小留大
min:删大留小
nomax:没上限都保留
minintegerThe minimum value of the counter. The default value is 1.
maxintegerThe maximum value of the counter. The default value is 7.
一旦达到这个值,旧的存档将在随后的滚动中被删除。
compressionLevelinteger设置压缩级别,0-9,其中0→无,1→最佳速度,到9→最佳压缩。仅对ZIP文件实现。
tempCompressedFilePatternString归档日志文件在压缩过程中的文件名模式。
<DefaultRolloverStrategy fileIndex="max" max="3" min="1">:
只保留3个日志文件,当到归档第4个文件时,
foo-1.log 被删除,
foo-2.log 被重命名为 foo-1.log,
foo-3.log 被重命名为 foo-2.log,
foo.log   被重命名为 foo-3.log。
创建新的   foo.log文件并继续写入。
<DefaultRolloverStrategy fileIndex="min" max="3" min="1">:
只保留3个日志文件,当到归档第4个文件时,
foo-3.log 被删除,
foo-2.log 重命名为foo-3.log,
foo-1.log 重命名为foo-2.log,
foo.log   重命名为foo-1.log。
创建新的   foo.log文件并继续写入。
<DefaultRolloverStrategy fileIndex="nomax">
这里的fileIndex="nomax"属性值表示文件索引没有最大限制。
换句话说,当使用%i作为文件名中的占位符时,日志文件将无限滚动,不会因为索引达到某个上限而停止创建新的日志文件。

Delete节点

参数TypeDescription
basePathStringRequired. Base path from where to start scanning for files to delete.
maxDepthint1、The maximum number of levels of directories to visit.
1.1、0 Log4j2只会检查${LOG_HOME}直接指向的目录下的.log.gz格式文件是否符合删除条件,
1.2、Integer.MAX_VALUE indicates that all levels should be visited.
1.3、The default is 1,Log4j2不仅会检查${LOG_HOME}指向的目录下的.log.gz格式文件是否符合删除条件,还会检查该目录下1层的所有子目录中的相同格式文件。
pathConditionsPathCondition[]PathCondition如果进行嵌套,则是先判断外层的PathCondition,然后进行内层的判断。如果没有嵌套,则是按顺序进行判断。

也可以创建自定义条件或使用内置条件:
IfFileName 如果文件名与此参数匹配则结果为true,此参数为正则表达式或 glob的文件。
IfLastModified 最后修改时间早于或等于此参数则结果为true,此参数为duration。
IfAccumulatedFileCount 文件数超过指定个数则结果为true,此参数为整型。
IfAccumulatedFileSize 所有文件总大小达到此参数则结果为true,此参数为KB、MB、GB。

IfAll 如果此标签下的所有条件都配置成功(逻辑与),则结果为true。
IfAny 如果此标签下的任何一个条件匹配成功(逻辑或),则结果为true。
IfNot 如果此标签下的所有条件都不匹配(逻辑非),则结果为true。
<DefaultRolloverStrategy fileIndex = "nomax">
    <Delete basePath="${LOG_HOME}" maxDepth="2">
        <IfFileName glob="*.log.gz">
            <IfLastModified age="7d">
                <IfAny>
                    <IfAccumulatedFileSize exceeds="100M"/>
                    <IfAccumulatedFileCount exceeds="100"/>
                </IfAny>
            </IfLastModified>
        </IfFileName>
    </Delete>
</DefaultRolloverStrategy>
<DefaultRolloverStrategy fileIndex = "nomax">
    <Delete basePath="${LOG_HOME}" maxDepth="2">
        <IfFileName glob="*.log.gz">
            <IfAny>
                <IfAccumulatedFileSize exceeds="100M"/>
                <IfAccumulatedFileCount exceeds="100"/>
                <IfLastModified age="30d"/>
            </IfAny>
        </IfFileName>
    </Delete>
</DefaultRolloverStrategy>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值