Может ли app4 log4j (или другого регистратора Java) принимать или получать доступ к объектам контекста запроса? - PullRequest
0 голосов
/ 30 октября 2010

В настоящее время я пишу веб-сервис, используя Restlet, и веду журнал с slf4j перед log4j.В настоящее время у меня есть стандартные log4j Appenders для входа в файлы.То, что я пытался сделать, это также включить вывод журнала в HTTP-ответ, используя пользовательский Appender.

Проблема, которую я вижу, заключается в том, что Appenders по умолчанию не имеют доступа к контексту выполняемого запроса, что имеет смысл, поскольку теоретически запрос может завершиться до того, как асинхронный Appender приступит к выполнению.Мне все еще любопытно, возможно ли это, возможно, сделав Appender синхронным и передав объект Response с вызовом журнала.Я не могу найти способ, чтобы log4j поддерживал это, будет ли другой фреймворк, как logback?Я бы не стал использовать этот метод в конце концов из-за проблем с производительностью, но все же мне любопытно.

К вашему сведению, мой текущий обходной путь - это специальный метод ведения журнала, который добавляет запись в ответ, а затем вызывает метод slf4j для стандартного ведения журнала.Недостатком этого является использование пользовательского метода, и я получаю записи журнала только для кода, которым я управляю (библиотеки, которые я использую, которые используют только Appenders, не регистрируются в Response)

1 Ответ

0 голосов
/ 03 ноября 2010

Большинство операций Appender не происходят асинхронно.Я не уверен, как slf4j изменяет это уравнение, но вы, безусловно, можете создать Appender, который знает, как форматировать любой данный объект в LogEvent.Асинхронность на самом деле не должна иметь значения, поскольку контекст запроса должен оставаться неизменным после его поступления в Appender - достаточно иметь ссылку.

Как получить доступ к контексту запроса вне кода Log4J?

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

...