如何使用log4j2删除旧日志

14

(请注意,我已经在互联网上搜索了许多文档。我正在使用 storm-0.10.0-beta1 版本。Storm 中的 log4j2 配置文件是 worker.xml)

现在,我尝试使用 log4j2。

我正在寻找删除旧日志的方法,但是我找不到。 配置的一部分如下所示。

    <RollingFile name="SERVICE_APPENDER"
             fileName="${sys:storm.home}/logs/${sys:logfile.name}.service"
             filePattern="${sys:storm.home}/logs/${sys:logfile.name}.service.%d{yyyyMMdd}">
        <PatternLayout>
            <pattern>${pattern}</pattern>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        </Policies>
        <DefaultRolloverStrategy max="9"/>
    </RollingFile>

一开始,我预期超过三天的日志文件会被删除。

但实际上并没有自动删除。

所以我想知道是否有方法可以删除旧日志文件。

如果有我还不知道的方法,请告知我。


你有没有尝试过发生了什么?据我所记,log4j已经删除了过时的文件,因此我认为log4j2也会这样做。只需将rolloverstrategy设置为2并更改系统日期以尝试此操作... - Marged
@Marged 感谢您的评论。即使当前项目显示我不起作用,我也会再试一次。 - obanadingyo
2个回答

23
自2.5版本以来,Log4j支持在每次滚动时执行的自定义删除操作
您可以通过以下任意组合来控制要删除的文件:
  1. 名称(匹配globregex
  2. 年龄(“如果超过14天,则删除”)
  3. 数量(“仅保留最近的3个”)
  4. 大小(“仅保留最新的文件,最多500MB”)
需要对要删除的文件进行更精细的控制的用户可以使用任何支持的JSR-223脚本语言指定一个脚本条件。
请查看文档,它有三个完整的例子可能会有用。
对于您的问题,这个代码片段应该有效:
<RollingFile name="rollingFile" 
      fileName="/path/app.log"
      filePattern="/path/app.%d{yyyy-MM-dd}.log"
      ignoreExceptions="false">
. . .
      <DefaultRolloverStrategy>
        <!--
          * only files in the log folder, no sub folders
          * only rolled over log files (name match)
          * only files that are 4 days old or older
        -->
        <Delete basePath="${sys:storm.home}/logs/" maxDepth="1">
          <IfFileName glob="*.service.????????" />
          <IfLastModified age="4d" />
        </Delete>
      </DefaultRolloverStrategy>
 . . .

<RollingFile>

最后,要小心!以这种方式删除的文件无法恢复。 :-)


1
有没有通过Log4j2 2.3版本实现这个选项的选项? - Prasanna Narayanan
1
不,恐怕不行。删除操作是在2.5版本中添加的...您可以提出后向修复建议(最好提供带有单元测试的补丁),但这不会是一个简单的移植,因为删除实现在很大程度上使用了Java 7 Path API。 - Remko Popma

3

感谢您分享链接。最终,我发现目前还没有办法删除基于时间的旧日志。根据此链接(https://issues.apache.org/jira/browse/LOG4J2-435)上的最后一条评论,提供删除旧时间日志的工作正在进行中。因此,我决定使用基于大小的滚动策略,使用索引% i。 - obanadingyo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接