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

Log4j2 RollingFile Appender滚动后原日志文件未删除如何解决?

解决Log4j2滚动日志后原文件保留的问题

嘿,我来帮你搞定这个问题!首先先提个小细节:你的RollingFile标签的name属性里多了个多余的},应该改成RollingInstitut,先把这个语法错误修正掉,避免后续可能的配置问题。

回到你的核心需求:要让原日志文件(比如converter-2018-01-19.log)在滚动备份后被自动清理,而不是和备份文件一起等4天后才删除。你需要在DefaultRolloverStrategy里添加专门的Delete规则,来处理原日志文件的生命周期。

修改后的完整配置如下:

<RollingFile name="RollingInstitut" fileName="logs/converter-${date:yyyy-MM-dd}.log" filePattern="logs/converter-%d{MM-dd-yyyy}-%i.log.gz">
  <Policies>
    <TimeBasedTriggeringPolicy interval="1" modulate="true" />
  </Policies>
  <PatternLayout>
    <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
  </PatternLayout>
  <DefaultRolloverStrategy max="4">
    <Delete basePath="logs" maxDepth="1">
      <!-- 匹配原日志文件的命名格式 -->
      <PathPattern>converter-${date:yyyy-MM-dd}.log</PathPattern>
      <!-- 和备份文件保持相同的保留周期,超过4天则删除 -->
      <IfLastModified age="4d" />
    </Delete>
  </DefaultRolloverStrategy>
</RollingFile>

配置说明:

  • Delete节点:负责定义日志清理规则,basePath指定日志目录为logs,maxDepth="1"表示只清理当前目录下的文件,不递归子目录。
  • PathPattern:精准匹配原日志文件的命名格式,确保只清理目标原文件,不会误删其他日志。
  • IfLastModified:设置和备份文件一致的4天保留周期,这样原文件和备份文件会在同一时间被清理,保持日志目录整洁。

如果你的需求是原文件在滚动完成后立即删除(不用等4天),可以调整Delete规则为:

<Delete basePath="logs" maxDepth="1">
  <IfFileName glob="converter-*.log" />
  <IfLastModified age="1d" />
</Delete>

这个规则会删除所有超过1天的原日志文件,刚好匹配你每天滚动一次的策略——当天的原文件正常写入,前一天的原文件在滚动后就会被清理掉。

内容的提问来源于stack exchange,提问作者Herbert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:20:05