如何使用log4j2删除旧日志

6rqinv9w  于 2022-11-06  发布在  其他
关注(0)|答案(2)|浏览(594)

(仅供参考。我已经在互联网上搜索了许多文档。我使用的是storm-0.10.0-beta1。Storm中log4j 2的配置文件是worker.xml)
现在,我尝试使用log4j 2。
我正在寻找删除旧日志的方法,但我找不到。部分配置如下。

<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天的日志文件。
但事实上,并没有。
所以,我想知道是否有一种方法可以删除旧的日志或没有。
如果有什么我没听懂的方法,请通知我。

vh0rcniy

vh0rcniy1#

从2.5开始,Log4j支持在每次滚动时执行的自定义Delete操作。
您可以通过以下任意组合来控制要删除的文件:
1.名称(匹配glob或regex
1.年龄(“如果14天或以上,则删除”)
1.计数(“仅保留最近的3个”)
1.大小(“仅保留最新的文件,最大500 MB”)
如果用户需要对要删除的文件进行更细粒度的控制,则可以使用任何受支持的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>

最后,要小心!没有办法恢复这样删除的文件。:-)

ewm0tg9j

ewm0tg9j2#

您可以在log4j的JIRA条目中找到更多背景信息:
https://issues.apache.org/jira/browse/LOG4J2-524
如果只使用TimeBasedTriggeringPolicy,自动删除旧日志文件似乎不起作用

相关问题