Java Logger: создайте файл с номером поворота + .log в качестве суффикса

Я использую Java Logger в пакете java.util.logging. Вот как я сейчас создаю регистратор:

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 ответа

Решение

Когда вы строите свой fileHandler объект, изменить filePath использовать шаблон. Создайте шаблон, который использует %g составная часть. Этот компонент будет заменен во время выполнения на номер поколения, чтобы различать повернутые журналы.

пример
Поместить файл журнала в системный временный каталог с формой %TEMP%/mylog.1.logиспользуйте следующую схему:

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

Первым аргументом FileHandler является шаблон файла, описанный в документации класса верхнего уровня. Если вы передадите просто имя файла без шаблона, FileHandler придется прибегнуть к добавлению генерации к имени файла, чтобы он мог вращаться между файлами. Если поколения сталкиваются из-за одновременного запуска нескольких экземпляров JVM, FileHandler может добавить уникальный номер к имени файла.

Создайте шаблон файла примерно так:

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

Это создаст файлы в вашей домашней папке с именами jvm0.log, jvm1.log, jvm2.log и так далее.

Другие вопросы по тегам