запись одного потока в Java с использованием log4j - PullRequest
2 голосов
/ 16 июня 2010

У меня есть веб-приложение, написанное на Java, и у меня есть пул потоков.

Приложение огромно, и я не могу внести серьезные изменения, например, я не могу изменить log4j.

Я выполняю пакетный процесс в пуле потоков и хочу записать в журнал все, что идет, для выполнения этого процесса.

В пуле потоков всегда будет только один активный поток.

Есть идеи, как мне это сделать?

Ответы [ 2 ]

1 голос
/ 16 июня 2010

Я предполагаю, что у вас есть другие потоки, такие как потоки запросов, которые вы не хотите регистрировать, и которые вы хотите регистрировать только события из пакета в выделенный файл журнала.

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

Это изменения, которые вы вносите, чтобы включить ведение журнала только для пакета:

  • В начале пакета добавьте новый аппендер к экземплярам Cataegory / Logger, из которых вы хотите записывать журналы.Это может быть корневая категория для регистрации всех журналов независимо от категории.
  • Новый appender сконфигурирован с текущим потоком (потоком пула потоков, в котором выполняется пакет).Appender использует это как часть своей внутренней фильтрации для записи только логов из данного потока.Пользовательский appender записывает журналы, просто делегируя обычному appender, который записывает log-файлы туда, куда вы хотите.
  • И в конце пакета удалите регистратор из категории (или просто отключите appender путемустановка зарегистрированного потока в нуль.)
1 голос
/ 16 июня 2010

Я предполагаю, что все выполняется в единственном упомянутом вами потоке, и под всем, что я имею в виду, все, что вас интересует.

Если вы можете изменить файл конфигурации log4j для включения идентификаторов потоков в строку формата журнала, то вы можете использовать инструмент (например, grep) для фильтрации журнала только по этому потоку.

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