如何使用Log4j2实现超5天日志自动压缩、满10天自动删除?
Log4j2 日志自动压缩、过期删除配置方案
你只需要修改原有RollingFile配置,新增DefaultRolloverStrategy规则即可实现需求,修改后的完整配置如下:
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="debug" name="MyApp" packages=""> <Appenders> <RollingFile name="RollingFile" fileName="logs/server.log" filePattern="logs/server_%d{yyyy-MM-dd}.log"> <PatternLayout> <Pattern>%d %p %c{1.} [%t] %m%n</Pattern> </PatternLayout> <Policies> <!-- 原有每日滚动规则,保持不变 --> <TimeBasedTriggeringPolicy interval="1" modulate="true" /> </Policies> <!-- 新增滚动策略,配置压缩、删除规则 --> <DefaultRolloverStrategy> <Delete basePath="logs" maxDepth="1"> <!-- 匹配所有.log后缀的未压缩日志文件 --> <IfFileName glob="server_*.log" /> <!-- 文件最后修改时间超过5天,执行压缩,压缩后原文件会被删除 --> <IfLastModified age="5d"> <Compress toSuffix=".gz" /> </IfLastModified> </Delete> <Delete basePath="logs" maxDepth="1"> <!-- 匹配所有压缩后的.gz日志文件 --> <IfFileName glob="server_*.log.gz" /> <!-- 文件最后修改时间超过10天,执行删除 --> <IfLastModified age="10d" /> </Delete> </DefaultRolloverStrategy> </RollingFile> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="RollingFile"/> </Root> </Loggers> </Configuration>
配置说明
- 每日生成日志文件的逻辑保持不变,仍然由
TimeBasedTriggeringPolicy控制每天滚动生成1个新的日志文件 - 新增的两条规则会在每次日志滚动触发时执行:
- 第一条规则扫描logs目录下所有未压缩的.log格式日志,只要最后修改时间超过5天,就自动压缩为.gz格式,压缩完成后原.log文件会被自动清理
- 第二条规则扫描logs目录下所有压缩后的.gz格式日志,只要最后修改时间超过10天,就直接删除
- 如果你不需要保留5天的未压缩日志,希望滚动当天就自动压缩,只需要把
filePattern改成logs/server_%d{yyyy-MM-dd}.log.gz即可,无需额外配置压缩动作,Log4j2识别到后缀为压缩格式会在滚动时自动压缩
注意:需要使用Log4j2 2.5及以上版本,才能支持配置中的
Delete和Compress动作
内容的提问来源于stack exchange,提问作者Akif
相关产品推荐
相关产品推荐

