Как создать или настроить Filehandler в java, чтобы logi c мои журналы в разных исполнениях? - PullRequest
0 голосов
/ 16 марта 2020

Вы можете подумать, что это глупый вопрос, но наверняка я не нашел для него спецификации.

У меня есть мини-программа, которая должна регистрировать успехи и неудачи при выполнении, и мне нужно, чтобы журнал был отделен по умолчанию, так что я могу легко прочитать его каждый раз. Первоначально я поставил:

Logger.getLogger("Success").addHandler(new FileHandler("var/success.log", true));

Я намеревался иметь растущий журнал, и что каждый раз, когда я выполнял программу, журнал будет расти. Когда я смотрю на журнал, на самом деле у него просто много заголовков, по одному разу на каждый раз, когда я выполняю эту строку, даже если журнал не был сохранен. Я почти уверен, что это не так, как это должно работать, у меня больше нет 1 уникального большого журнала, но их много в одном файле, и переключение на другой форматер совсем не похоже на решение (я до сих пор need XML).

Одно из решений, которое я сейчас ищу, - это открывать файл fre sh при каждом выполнении. Шаблон в конструкторе, похоже, не помогает с этим. % u проверяет только наличие уже открытого или невозможного для записи, но с включенным добавлением или без него существующий файл не остановит этот обработчик. И для% g, вращение, оно просто вращается по размеру, но то же самое, что я не идентифицирую, предыдущая проблема журнала все еще происходит.

есть ли способ попасть туда, изменив Logger, LogManager, конструктор или Filehandler? Мое собственное и конкретное c решение, использующее файлы (или путь, или файл или что-то еще) для проверки каждой комбинации перед открытием регистратора, не кажется эффективным, и это то, о чем я действительно не хочу беспокоиться.

Кроме того, есть ли способ получить FileHander для фактического чтения ввода файла и ПРОДОЛЖИТЬ с журналом, в котором он был оставлен, вместо создания нового с новыми заголовками?

В эти секунды вопрос, хотя он лучше соответствует моим потребностям, кажется труднее (но что бы я знал?), поэтому я могу работать с первым.

Спасибо!

1 Ответ

0 голосов
/ 17 марта 2020

Первоначально я поставил:

Logger.getLogger("Success").addHandler(new FileHandler("var/success.log", true));

Некоторые вещи, которые вы хотите улучшить в своем кодировании JUL:

  1. Держитесь за регистратор в stati c окончательная жесткая ссылка .
  2. Используйте абсолютный путь или токен, который разрешает абсолютный путь для обработчика файлов .
  3. Используйте блок stati c, чтобы вы не создавали и не добавляли в обработчик несколько обработчиков файлов.

Я хотел, чтобы журнал увеличивался и что каждый раз, когда я выполняю программу, журнал будет расти. Когда я смотрю на журнал, на самом деле у него просто много заголовков, по одному разу на каждый раз, когда я выполняю эту строку, даже если журнал не был сохранен. Я почти уверен, что это не так, как это должно работать, у меня больше нет 1 уникального большого журнала, но их много в одном файле, и переключение на другой форматер совсем не похоже на решение (я до сих пор нужно XML).

[snip]

Кроме того, есть ли способ заставить FileHander фактически прочитать ввод файла и ПРОДОЛЖИТЬ с журналом, где он был оставлен, вместо создания новый с новыми заголовками?

Вот как это работает. Причина и решение описаны в этом вопросе SO . Вот пример кода для CSV, но он будет работать так же для XML. Расширьте XMLFormatter и переопределите getHead и getTail.

Одно из решений, которое я сейчас ищу, - это открывать файл fre sh при каждом выполнении. Шаблон в конструкторе, похоже, не помогает с этим. % u проверяет только наличие уже открытого или невозможного для записи, но с включенным добавлением или без него существующий файл не остановит этот обработчик. И для% g, вращение, оно просто вращается по размеру, но я не могу определить, что предыдущая проблема журнала все еще возникает.

Вы создаете FileHandler из кода, так что вы можете просто кодировать logi c для создания уникального имени файла самостоятельно.

new FileHandler("var/success" + System.nanoTime() + ".log", true);
...