Как направить сообщения log4j уникальным приложениям - PullRequest
1 голос
/ 31 января 2012

В log4j большинство (если не все) аппендеры расширяют AppenderSkeleton, что обеспечивает setThreshold(Priority) метод для установки минимального «уровня», на который должно быть установлено сообщение, чтобы аппендер мог его где-то зарегистрировать.

Я хочу записывать сообщения в разные приложения, основываясь на точном уровне / приоритете сообщения.

Например, я хочу, чтобы сообщения отладки записывались на ConsoleAppender, но нигде больше. Я хочу, чтобы сообщения INFO регистрировались на FileAppender и больше нигде. Я хочу, чтобы сообщения об ОШИБКАХ регистрировались на JMSAppender и больше нигде.

Проблема заключается в этом setThreshold(Priority) методе, который устанавливает «минимальный порог», необходимый для регистрации сообщения.

Конечно, я мог бы установить для порога ConsoleAppender значение DEBUG, но, поскольку сообщения INFO и ERROR "выше", чем сообщения DEBUG, я также получу сообщения INFO и ERROR, отправленные в ConsoleAppender.

Существуют ли способы или способы настройки "уровней" / приоритетов приложения точно или этот минимальный порог является моим единственным выходом?

Редактирование с использованием LevelMatchFilter :
Это шаг в правильном направлении?

LevelMatchFilter filter = new LevelMatchFilter();
filter.setLevelToMatch(Level.DEBUG.toString());

consoleAppender.addFilter(filter);

Выполнит ли приведенный выше фрагмент кода работу по обеспечению того, чтобы ConsoleAppender регистрировал ОТЛАДКИ и только ОТЛАДКИ?

1 Ответ

0 голосов
/ 31 января 2012

Вы можете прикрепить LevelMatchFilter к любому приложению для фильтрации сообщений журнала только по точному уровню.

Из Javadoc:

Это очень простой фильтр, основанный на сопоставлении уровней.

Фильтр допускает две опции LevelToMatch и AcceptOnMatch. Если существует точное соответствие между значением параметра LevelToMatch и уровнем LoggingEvent, то метод decide(org.apache.log4j.spi.LoggingEvent) возвращает Filter.ACCEPT в случае, если значение параметра AcceptOnMatch установлено в true, если оно ложь, тогда Filter.DENY возвращается. Если совпадений нет, возвращается Filter.NEUTRAL.

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