#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, если столкнетесь с трудностями.