如何使用log4j2删除旧日志

时间:2015-10-20 13:17:35

标签: java logging log4j log4j2

(F.Y.I。我已经在Internet上搜索了很多文档。我使用的是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>

首先,我预计将删除超过3天的日志文件。

但实际上,事实并非如此。

所以,我想知道是否有办法删除旧日志。

如果有一种方法我还没有抓到,请通知我。

2 个答案:

答案 0 :(得分:6)

从2.5开始,Log4j支持在每次翻转时执行的custom Delete action

您可以通过以下任意组合控制删除哪些文件:

  1. 姓名(匹配globregex
  2. Age(“如果14天或更长时间删除”)
  3. 计数(“只保留最近的3”)
  4. 大小(“仅保留最近500MB的文件”)
  5. 需要对要删除的文件进行更细粒度控制的用户可以使用任何受支持的JSR-223脚本语言指定脚本条件。

    请查看documentation,它有三个可能有用的完整示例。

    对于您的问题,此代码段应该有效:

      <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>
    

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

答案 1 :(得分:1)

您可以在此log4j的JIRA条目中找到更多背景信息:

https://issues.apache.org/jira/browse/LOG4J2-524

当您仅使用TimeBasedTriggeringPolicy

时,似乎自动删除旧日志文件不起作用