Java Logger:创建旋转编号为+ .log作为后缀的文件

时间:2014-02-11 14:39:22

标签: java logging java.util.logging

我在java.util.logging包中使用Java Logger。这就是我目前创建记录器的方式:

FileHandler fileHandler = new FileHandler(filePath, 5242880, 5, true);
fileHandler.setFormatter(new java.util.logging.Formatter() {
  @Override
  public String format(LogRecord logRecord) {
    if(logRecord.getLevel() == Level.INFO) {
      return "[INFO  " + createDateTimeLog() + "]  " + logRecord.getMessage() + "\r\n";
    } else if(logRecord.getLevel() == Level.WARNING) {
      return "[WARN  " + createDateTimeLog() + "]  " + logRecord.getMessage() + "\r\n";
    } else if(logRecord.getLevel() == Level.SEVERE) {
      return "[ERROR " + createDateTimeLog() + "]  " + logRecord.getMessage() + "\r\n";
    } else {
      return "[OTHER " + createDateTimeLog() + "]  " + logRecord.getMessage() + "\r\n";
    }
  }
  });
logger.addHandler(fileHandler)

现在,当我的记录器记录时,它会创建一个扩展名为.0,.1,.2(等)的文件。我更愿意说.0.log,.1.log(等)。我无法找到我可以设置的地方。任何想法/帮助都会很棒。

2 个答案:

答案 0 :(得分:3)

构建fileHandler对象时,请修改filePath以使用模式。创建一个使用%g组件的模式。该组件将在运行时使用世代号替换,以区分旋转日志。

示例
要将日志文件放在表单%TEMP%/mylog.1.log的系统临时目录中,请使用以下模式:

`"%t/mylog.%g.log"` 

答案 1 :(得分:3)

FileHandler的第一个参数是顶级类文档中描述的文件模式。如果只传递没有模式的文件名,则FileHandler将不得不求助于将生成附加到文件名,以便它可以在文件之间轮换。如果由于多个JVM实例同时运行而导致代数发生冲突,则FileHandler可以在文件名中附加唯一编号。

生成类似以下内容的文件模式:

FileHandler fileHandler = new FileHandler("%hjvm%g.log", 5242880, 5, true);

这将在您的主文件夹中生成名为jvm0.log,jvm1.log,jvm2.log等的文件。