java - 除了使用 MaxBackupIndex 之外,我们还可以删除 log4j 中早于特定天数的日志吗

标签 java log4j log4j2

我在我的应用程序中使用 log4j,并且日志是使用此框架生成的。

我想删除超过 10 天的日志,因为日志大小正在迅速增加。

我知道 MaxFileSize 和 MaxBackupIndex 通常会根据生成的文件数量进行删除,但我的要求是删除早于特定天数的日志。我们在 log4j 中是否有任何选项可以实现此目的,或者我们是否需要使用如下所示的一些 unix 脚本并清除日志?

find -type f -mtime +7 -exec rm -f {} \;

谢谢 哈沙 GNS

最佳答案

Log4j2 支持 custom Delete action在翻转配置中。这应该正是您正在寻找的。

下面是一个示例配置,它使用 RollingFileAppender 并将 cron 触发策略配置为每天午夜触发。文件存储在基于当前年份和月份的目录中。基本目录下与 "*/app-*.log.gz" glob 匹配且 60 天或更早的所有文件都会在翻转时删除:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
  <Properties>
    <Property name="baseDir">logs</Property>
  </Properties>
  <Appenders>
    <RollingFile name="RollingFile" fileName="${baseDir}/app.log"
          filePattern="${baseDir}/$${date:yyyy-MM}/app-%d{yyyy-MM-dd}.log.gz">
      <PatternLayout pattern="%d %p %c{1.} [%t] %m%n" />
      <CronTriggeringPolicy schedule="0 0 0 * * ?"/>
      <DefaultRolloverStrategy>
        <Delete basePath="${baseDir}" maxDepth="2">
          <IfFileName glob="*/app-*.log.gz" />
          <IfLastModified age="60d" />
        </Delete>
      </DefaultRolloverStrategy>
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="RollingFile"/>
    </Root>
  </Loggers>
</Configuration>

关于java - 除了使用 MaxBackupIndex 之外,我们还可以删除 log4j 中早于特定天数的日志吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42408315/

相关文章:

Java-识别整数和 double

java - 如何在 android 中将蓝牙设备发现超时设置为 1 小时(3600)秒并且从不超时

java - 使用 log4j2 时日志文件为空

java - 如何以编程方式禁用 BurstFilter 并使用 log4j2 中的某些参数启用它?

java - ReSTLet - 使用路由器附加资源类时遇到问题

java - 无法使用 ClassPathXmlApplicationContext 加载我的配置文件,

Java:将 Marshaller 输出重定向到 log4j

java - Log4j FileNotFoundException - Java FileSystem getBooleanAttributes() 方法如何工作?

java - 一个 jar 文件中的多个 log4j.xml

java - Log4j 2 JSON 配置