В файле log4j.properties я установил уровень в ERROR. Для некоторых пользователей мне нужно установить уровень в DEBUG. Я смог изменить уровень ведения журнала во время выполнения, но это будет доступно для всех пользователей, обращающихся к приложению одновременно. Есть ли другой способ, с помощью которого мы можем включить ведение журнала для выбранных пользователей? Любая помощь будет оценена.Включить ведение журнала Log4j для определенных пользователей
ответ
Да, но.
Вы можете сделать свои логин-имена с указанным классом + пользователем, а не только классом, и создать регистратор для метода (или если вы хотите получить фантазии, кэш-регистраторы в каком-то пуле, введенном пользователем) , а затем соответствующим образом настройте протоколирование.
Это очень грязный и навязчивый код, но поскольку пользователь является свойством среды выполнения, я не вижу, как (не хватает AspectJ или его кузенов), как вы избегаете такого беспорядка.
Другой вариант - специально форматировать ваши сообщения журнала и включать имя пользователя в сообщение журнала, а затем разбирать журналы. Это позволит отлаживать для всех (что может быть проблемой производительности, очевидно), но если проблема связана скорее с изолированием регистрации пользователей, а не с ограничением количества отладочных вызовов, это может быть решением.
Я предполагаю, что у вас есть веб-приложение или подобное, а также несколько идентифицируемых пользователей, обращающихся к нему одновременно?
Вы не можете легко изменить конфигурацию для пользователя в Log4j. Однако я бы рассмотрел следующее (это предполагает веб-сервер или аналогичный, причем каждый пользовательский запрос находится в отдельном потоке):
- идентифицирует пользователя, выполняющего вызов сервера, как только они совершают этот вызов. Храните эти данные пользователя в MDC
- Внедрение пользовательского Log4J appender. Для каждого входящего вызова вы можете проверить пользователя, сохраненного в MDC, и при необходимости отрегулировать степень серьезности/протоколирования.
Это небольшая работа (с учетом вышеуказанных предположений), но она должна работать. Очевидно, что это неверно, если предположения, которые я сделал о вашей архитектуре, неверны.
Эта проблема решается в logback (преемник log4j) с TurboFilters. См. Пример «Конфигурация MDCFilter и MarkerFilter». Если вам нужна дополнительная помощь, обратитесь в список рассылки пользователей-пользователей.
Не создавайте пользовательский appender. У вас будет новый тип для каждого вида приложения. Вместо этого создайте один фильтр, который может быть составлен с любым приложением. – erickson
Я смутно предполагал, что пользовательский приставка делегирует дополнительные наборы приложений. Но фильтры выглядят как очень подходящее решение в этом случае. –