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

使用单个日志文件并删除旧日志文件的Logback FileAppender

景康安
2023-03-14

我使用在logback.groovy文件中配置的logback来管理应用程序的日志。我想:

  1. 创建日志文件,这些日志文件在应用程序启动时贴上时间戳,并在应用程序的生命周期内作为单个日志文件保留。(我们可能同时运行一个应用程序的多个实例,或者在一天内运行多个实例,它们可能会运行几天。)
  2. 保持干净的日志文件目录,以便删除超过给定期间的日志。
appender("FILE", FileAppender) {
  file = "path/to/log/dir/log_file_${date}.log"
}

实现第二个建议使用RollingFileAppenderTimeBasedRollingPolicy,如下所示--这将日志文件保存7天。但是,这将使用一个文件来记录给定日期的应用程序的所有实例,而不管应用程序是何时运行的:

appender("FILE", RollingFileAppender) {
    rollingPolicy(TimeBasedRollingPolicy) {
        fileNamePattern = "path/to/log/dir/log_file_%d{yyyyMMdd}.log"
        maxHistory = 7;
    }
}

我怎样才能兼得自己的蛋糕--即获得每个应用程序运行一个日志文件的好处(带有启动时间戳),但使用RollingFileAppender/TimeBasedRollingPolicy的历史清理好处?

共有1个答案

谭刚毅
2023-03-14

如果有用的话,可以通过创建自定义的fileappender,如下所示:

public class TidyFileAppender<E> extends FileAppender<E> {

  protected File directory;

  @Override
  public void start() {
    if (conditions to determine historical files to be deleted) {
      File[] oldFiles = directory.listFiles(new FileFilter() {
        @Override
        public boolean accept(File file) {
          // return true if file is 'old'
        }
      });
      if (oldFiles != null) {
        for (File oldFile : oldFiles) {
          if (!oldFile.delete()) {
            addWarn("Failed to delete old log file: " + oldFile);
          }
        }
      }
    } else {
      addWarn("Cannot tidy historical logs...");
    }
    super.start();
  }
}
 类似资料:
  • 我在SpringBoot中使用logback,但无法删除旧的日志文件。 我在logback-spring.xml文件中定义了以下appender: 即使我设置了“MaxHistory”和“CleanHistoryonStart”,超过10天的日志文件也不会被删除。既不是翻转也不是启动。

  • 我用的是log4j2.14。1. 我想做的是有一个appender,它允许我每天有一个日志文件,但在N天后删除旧的日志(例如,我希望最多有10天的日志)。 我尝试过使用DirectWriteRolloverStrategy,它看起来不错,每天创建一个日志文件,但显然无法删除旧文件,因此我的日志目录中充满了日志;maxFiles属性似乎只设置了与文件模式匹配的时间段内允许的最大文件数(请参见http

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

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

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

  • 要有效地管理Web服务器,就有必要反馈服务器的活动、性能以及出现的问题。Apache HTTP服务器提供了非常全面而灵活的日志记录功能。本文将阐述如何配置文件以及如何理解日志内容。 安全警告 任何人只要对Apache存放日志文件的目录具有写权限,也就当然地可以获得启动Apache的用户(通常是root)的权限,绝对不要随意给予任何人存放日志文件目录的写权限。细节请参见安全方面的提示。 另外,日志文