【问题标题】:Cleanly force Log4j RollingFileAppender to roll shortly after midnight?干净地强制 Log4j RollingFileAppender 在午夜后不久滚动?
【发布时间】:2011-05-04 05:33:13
【问题描述】:

Log4j RollingFileAppender 的正常行为是在第一条日志消息发生在不同的日期时滚动,但有些人会因为每个日期的空日志文件而感到温暖和模糊,即使没有发生任何事情。有没有办法强制它在午夜之后滚动而不将虚拟消息写入日志?

【问题讨论】:

  • 我的猜测是这不是默认行为,因为这需要某种计时器线程在后台运行,这需要您的应用程序不断运行。这不是 log4j 施加的限制。

标签: java logging log4j rollingfileappender


【解决方案1】:

我已经非常仔细地查看了这段代码 - 简单的答案是“不”。翻转是作为 Appender 上 doAppend() 流的一部分触发的 - 触发它的唯一方法是记录一些内容。

你可以用 cron 来伪造这个:只需让一个 cron 脚本在明天 11 点 58 分触摸文件。这将为您提供您正在寻找的空日志文件行为。

下面是实现翻转功能的代码:

void rollOver() throws IOException {

    /* Compute filename, but only if datePattern is specified */
    if (datePattern == null) {
      errorHandler.error("Missing DatePattern option in rollOver().");
      return;
    }

    String datedFilename = fileName+sdf.format(now);
    // It is too early to roll over because we are still within the
    // bounds of the current interval. Rollover will occur once the
    // next interval is reached.
    if (scheduledFilename.equals(datedFilename)) {
      return;
    }

    // close current file, and rename it to datedFilename
    this.closeFile();

    File target  = new File(scheduledFilename);
    if (target.exists()) {
      target.delete();
    }

    File file = new File(fileName);
    boolean result = file.renameTo(target);
    if(result) {
      LogLog.debug(fileName +" -> "+ scheduledFilename);
    } else {
      LogLog.error("Failed to rename ["+fileName+"] to ["+scheduledFilename+"].");
    }

    try {
      // This will also close the file. This is OK since multiple
      // close operations are safe.
      this.setFile(fileName, false, this.bufferedIO, this.bufferSize);
    }
    catch(IOException e) {
      errorHandler.error("setFile("+fileName+", false) call failed.");
    }
    scheduledFilename = datedFilename;
  }

【讨论】:

  • 如果可以访问 appender,也可以调用 RollingFileAppender.rollOver。
  • 在日志不存在时调用 rollover() 不会让询问者得到他们想要的:正确日期和时间的空日志文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-16
  • 2017-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-13
相关资源
最近更新 更多