当前位置: 首页 > 知识库问答 >
问题:

如何使用log4j2删除旧日志

施德运
2023-03-14

(F.Y.I.我已经在互联网上搜索了很多文档。我正在使用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个答案

从光启
2023-03-14

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

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

它似乎是这样的情况,自动删除旧日志文件不工作,当你只使用TimeBasedTriggeringPolicy

濮阳耀
2023-03-14

从2.5开始,Log4j支持在每次滚动时执行的自定义删除操作。

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

  1. 名称(匹配glob或regex)
  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>

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

 类似资料:
  • 这是我的log4j2.yaml。现在,这个记录器在一天内创建一个文件,当这一天结束时,记录器将创建一个文件夹“归档”,并将旧的日志文件放在这个文件夹中。我需要删除7天前创建的所有旧日志。我做错了什么?请帮帮我

  • 我正在尝试以编程方式配置log4j2v2。11.1作为DefaultRolloverStrategy的一部分,使用新的删除操作删除旧文件。 正如您可以从下面的代码中看到的,我已将系统设置为每天创建日志文件,并在文件大小达到1MB时滚动该文件。 我尝试使用两个条件将删除操作添加到DefaultRolloverStrategy中—IfFileName和IfLastModified。IfFileName

  • 删除7天前的日志文件与log4j.xml 我正在尝试使用删除旧的日志文件,但它不起作用。 但是它在我的计算机上工作,但在Linux服务器上不工作。日志文件在Linux服务器上的存储路径是。 有人能帮忙吗。

  • 问题内容: 我正在尝试将 log4j 配置为仅保留指定数量的备份文件或保留不超过一定年龄的文件。最终,我希望有 时间(每天)基于触发策略, 并保留30个备份文件或删除早于30天的文件。 经过一些研究后,我了解到在使用 时间策略 时无法指定备份文件的最大数量,但是遇到了这个问题https://issues.apache.org/jira/browse/LOG4J2-435和此文档片段http: //

  • 我使用下面的log4j2。xml 我想要的是旧的日志文件被删除,如果累积的大小超过。但是log4j2首先删除最近修改的文件。https://logging.apache.org/log4j/2.x/manual/appenders.html说有一个路径排序参数可以做到这一点。有人能告诉我如何指定相反的将逻辑排序为默认值?

  • 我最近一直在使用log4j2,遇到了一个问题。发生翻转时,活动日志文件保留其日志。是否可以清除日志文件,以便滚动的文件将只保留日志在名称中指定的时间段?