Включить Log4 Log4j для определенных пользователей - PullRequest
2 голосов
/ 21 мая 2009

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

Ответы [ 3 ]

4 голосов
/ 21 мая 2009

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

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

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

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

1 голос
/ 29 мая 2009

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

0 голосов
/ 21 мая 2009

Да, но.

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

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

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

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