Ведение журнала на основе компонентов с обратным входом (или: перехватывать сообщения внешнего журнала)

#java #logging #logback

#java #ведение журнала #обратный вход

Вопрос:

Я ищу способ определить транзитивную маршрутизацию сообщений журнала. Допустим, у нас есть приложение под названием poly с этими пакетами:

 com.mycompany.server-common
com.mycompany.communication
com.mycompany.webservice
  

общий сервер используется обоими двумя другими. Все 3 также используют org.hibernate.

Теперь мне хотелось бы иметь 1 файл журнала для компонента webservice со всеми сообщениями от com.mycompany.webservice и с теми сообщениями от com.mycompany.server-common и org.hibernate, которые были инициированы веб-сервисом. И затем, другой соответствующий файл для пакета связи.

Мое приложение представляет собой файл war, запущенный в tomcat, где все компоненты выполняются в 1 контексте (он поставляется в 1 файле war). Я уже определил несколько файлов журнала, но они, естественно, регистрируют только то, что я определил статически, транзитивного включения нет.

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

Приветствуются любые подсказки или обсуждения.

Комментарии:

1. NDC или MDC — это самый простой подход, что вас беспокоит в любом из них?

2. @DaveNewton просто еще не использовал их, поэтому я хотел получить больше мнений, основанных на опыте

3. Они удобны для подобных вещей, хотя я часто делал некоторые настройки выходного формата, чтобы он был более «нормализованным», например, сначала вводил запись пользователя или сначала компонент и т.д. В зависимости от потребностей.

Ответ №1:

Если вы установите ключ MDC, когда webservice начнет обслуживать запрос, и очистите ключ MDC в конце запроса, SiftingAppender выполнит то, что вы просите. Кричите в списке рассылки logback-user, если столкнетесь с трудностями.