Log4j2 DefaultRolloverStrategy清理日志实战

一、背景描述

日常应用维护中,应用日志文件自动删除功能必不可少。当然在大厂内部普通研发可能不需额外关注太多,会有运维团队提供专业解决方案完成服务器日志自动清理工作,这些解决方案能够很好的满足绝大多数应用的日常日志自动清理需求,因为大多数场景,应用只产生一个日志文件,只需把这个文件滚动结转直至满足条件触发清理即可。但是某些场景下一个应用可能产生不止一个日志文件,各个文件写入日志频率也可能各不相同,此时仅仅强依赖通用的解决方案很可能会出现日志误删等各种意料之外的情况。其实我们可以考虑日志框架自身对于日志自动清理的支持。今天简单聊一下log4j2的DefaultRolloverStrategy清理日志的实战,log4j2本身的其他配置不做过多赘述。 

二、实战方案

通过DefaultRolloverStrategy的Delete操作配置日志清理策略。

log4j2 DefaultRolloverStrategy常见的删除方式就是通过max属性来控制日志滚动来实现结转日志删除的。这种方式足够简单但是不够灵活。log4j自2.5版本起,DefaultRolloverStrategy支持配置自定义的Delete动作。配置Delete动作相较于max属性来说,允许用户更好地控制滚动时删除哪些文件。下面是Delete常见的参数:

参数名类型描述
basePathString开始扫描要删除文件的根路径
maxDepthint基于basePath访问目录的最大层级,默认1
testModeboolean用于测试。true时不会真正执行删除,只会打印一行内部的info级别的status logger
pathConditionsPathCondition[]扫描条件,可配置多个条件,满足条件的文件将会被删除
scriptConditionScriptCondition自定义脚本条件

内置的PathCondition:

•IfFileName

•IfLastModified

•IfAccumulatedFileCount

•IfAccumulatedFileSize

•IfAll

•IfAny

•IfNot

注:参数不做过多阐释,翻译可能导致释义不准确,感兴趣的查阅文末标注的官方文档

下面是一个相对比较简单的DefaultRolloverStrategy自定义删除策略的配置示例,仅供参考。如果要配置多条件、更复杂的清理策略,可以灵活搭配上述的Delete参数,可实现多条件逻辑与、或、非。

<!-- 滚动时压缩文件达到15G的时候清理-->
<DefaultRolloverStrategy max="20">    
    <Delete basePath="${log_home}">        
        <IfFileName glob="*.log.gz"/>        
        <IfAccumulatedFileSize exceeds="15GB"/>    
    </Delete>
</DefaultRolloverStrategy>

在配置和使用DefaultRolloverStrategy以及Delete的时候,需注意以下事项:

1.DefaultRolloverStrategy的max属性默认值是7,这个最大计数值需搭配RollingFileAppender的filePattern属性配置的整数i

2.配置Delete可能删除任意文件,不止是已滚动归档文件。误删除某些未归档的日志文件会导致后续日志无法正常输出,只能重新初始化log4j2。因此可以考虑归档文件和未归档分布在不同目录下或者归档文件压缩处理,这样在配置Delete的时候可以通过basePath参数以及IfFileName条件明确指定要删除的文件

三、总结

推荐大家在生产环境根据自身应用依赖的日志框架,基于日志框架对于日志自动清理的支持自定义配置日志删除策略,以作为对于运维日志自动清理的补充,也算是双重保险。
Log4j2文档https://logging.apache.org/log4j/2.x/manual/appenders.html

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值