2009-05-21 2 views
1

В файле log4j.properties я установил уровень в ERROR. Для некоторых пользователей мне нужно установить уровень в DEBUG. Я смог изменить уровень ведения журнала во время выполнения, но это будет доступно для всех пользователей, обращающихся к приложению одновременно. Есть ли другой способ, с помощью которого мы можем включить ведение журнала для выбранных пользователей? Любая помощь будет оценена.Включить ведение журнала Log4j для определенных пользователей

ответ

0

Да, но.

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

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

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

4

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

Вы не можете легко изменить конфигурацию для пользователя в Log4j. Однако я бы рассмотрел следующее (это предполагает веб-сервер или аналогичный, причем каждый пользовательский запрос находится в отдельном потоке):

  1. идентифицирует пользователя, выполняющего вызов сервера, как только они совершают этот вызов. Храните эти данные пользователя в MDC
  2. Внедрение пользовательского Log4J appender. Для каждого входящего вызова вы можете проверить пользователя, сохраненного в MDC, и при необходимости отрегулировать степень серьезности/протоколирования.

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

+1

Не создавайте пользовательский appender. У вас будет новый тип для каждого вида приложения. Вместо этого создайте один фильтр, который может быть составлен с любым приложением. – erickson

+0

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

1

Эта проблема решается в logback (преемник log4j) с TurboFilters. См. Пример «Конфигурация MDCFilter и MarkerFilter». Если вам нужна дополнительная помощь, обратитесь в список рассылки пользователей-пользователей.