динамически создавая и уничтожая логендеры - PullRequest
5 голосов
/ 06 августа 2009

У меня есть устаревшее приложение PSVM, которое я хотел бы перенаправить выводом логирования в уникальные файлы при выполнении. Итак, если я вызову его в 10:00, то перенаправлю его вывод на {thread-id} -10: 00.log; и другой поток выполнения может начать выполнение в 10:01, и его вывод будет идти к {thread-id} -10: 01.log. Я понимаю, что это не элегантно.

Мои вопросы:

  • это возможно?
  • у кого-нибудь есть идеи, как подойти?
  • возможно ли освободить / уничтожить аппендер, когда он больше не нужен?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 06 августа 2009

Я бы начал с FileAppender и извлек бы из этого свой собственный. Просто измените свою версию, чтобы получить текущий идентификатор потока и добавить подходящий идентификатор потока / метку времени в файл перед созданием. Вы бы поддержали (скажем) карту (буферизованную) FileWriters , привязанную к идентификатору потока.

Написание аппендеров довольно тривиально - вот руководство Javaworld о том, как это сделать.

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

1 голос
/ 07 августа 2009

Это невозможно, по крайней мере, нелегко сделать в log4j. Однако, если вы посмотрите на SiftingAppender отгрузка с logback (преемником log4j), он разработан для обработки создания дополнений по критериям времени выполнения, а также их удаления, когда он больше не нужен.

Если вашему приложению нужно создать только один файл журнала для каждого запуска приложения, вы можете просто назвать свой файл журнала на основе метки времени. Если вам нужна дополнительная помощь, выкрикните в список рассылки logback-пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...