Log4j2如何定时删除旧的日志文件

后端 潘老师 7个月前 (10-26) 180 ℃ (0) 扫码查看

Log4j2中,使用RollingFileAppender和DefaultRolloverStrategy可以配置“删除”操作,从而在特定时间后删除旧的日志文件。

1.Log4j2删除操作

在log4j2中,RollingFileAppender需要一个TriggeringPolicy和RolloverStrategy。触发策略确定是否应该执行滚动,而滚动策略定义了如何执行滚动。

在Log4j2 2.5之前,DefaultRolloverStrategy的max属性是在滚动时删除日志的唯一选项。例如,每天开始之前,log4j将创建最多10个日志文件(每个20MB)。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
  <Appenders>
    <RollingFile name="RollingFile" fileName="logs/app.log"
                 filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
      <PatternLayout>
        <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
      </PatternLayout>
      <Policies>
        <TimeBasedTriggeringPolicy />
        <SizeBasedTriggeringPolicy size="20MB"/>
      </Policies>
      <DefaultRolloverStrategy max="10"/>
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="RollingFile"/>
    </Root>
  </Loggers>
</Configuration>

自Log4j2 2.5以来,新的Delete操作使用户可以更好地控制哪些文件在滚动时被删除,以及删除过去生成的其他日志文件。

例如,每天午夜时分,log4j滚动过程将删除基本目录中30天或更老的日志文件。

<DefaultRolloverStrategy>
  <Delete basePath="${baseDir}" maxDepth="2">
    <IfFileName glob="*/app-*.log.gz" />
    <IfLastModified age="P30D" />
  </Delete>
</DefaultRolloverStrategy>

2.保留某些日志并删除其他日志

在某些情况下,我们可能不想删除过去生成的所有日志文件;相反,我们可能希望根据日志文件的大小或数量保留一些旧的日志。

以下配置将删除匹配“/app-.log.gz”的文件,这些文件是30天或更老的,但保留最近的100GB或最近的10个文件,以先到者为准。

<DefaultRolloverStrategy max="100">
  <Delete basePath="${baseDir}" maxDepth="2">
    <IfFileName glob="*/app-*.log.gz">
      <IfLastModified age="P30D">
        <IfAny>
          <IfAccumulatedFileSize exceeds="100GB" />
          <IfAccumulatedFileCount exceeds="10" />
        </IfAny>
      </IfLastModified>
    </IfFileName>
  </Delete>
</DefaultRolloverStrategy>

3.properties属性配置

我们还可以在log4j2.properties文件中以以下方式配置Delete操作:

appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.max = 5
appender.rolling.strategy.action.type = Delete
appender.rolling.strategy.action.basepath = ${baseDir}
appender.rolling.strategy.action.maxdepth = 2
appender.rolling.strategy.action.condition.type = IfLastModified
appender.rolling.strategy.action.condition.age = 30D
appender.rolling.strategy.action.PathConditions.type = IfFileName
appender.rolling.strategy.action.PathConditions.glob = */app-*.log.gz

4.结论

在本简短的Log4j2教程中,我们学习了如何在滚动事件时删除旧日志文件。我们学习了如何根据聚合日志文件的大小和数量删除更旧的日志。我们还学习了如何使用属性文件配置Delete操作。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/back/10411.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】