You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 11:18:02