Поддержка MDC (сопоставленный диагностический контекст) для JUL (Java.util.Logging)

У меня есть настройка механизма ведения журнала с помощью Slf4j и java.util.Logging. У меня есть несколько потоков, поэтому я не могу получить четкое представление из журналов, поскольку они смешаны. Теперь я пытаюсь использовать концепцию MDC, чтобы добавить дополнительные данные в файл журнала, чтобы они ясно.

Проблема такая же, как и в Slf4j, хотя он поддерживает MDC java.util. Logging - нет. Но он говорит

Если базовая структура не предлагает MDC, например java.util.logging, то SLF4J по-прежнему будет хранить данные MDC, но информацию в них необходимо будет извлекать с помощью пользовательского кода пользователя.

Я пытаюсь найти способ сделать этот пользовательский код. Гугление мне мало помогает. В Slf4j есть вспомогательный класс под названием «BasicMDCAdapter». Но я не знаю, как его использовать. Я нигде не мог найти пример кода.

Это также является кодом, помогающим в этом, но по-прежнему не дает описания.

Я ценю помощь от кого-то здесь.

Спасибо.


person Susitha Ravinda Senarath    schedule 29.05.2013    source источник
comment
Я ненавижу давать ответ, попробуйте что-нибудь еще, но... Вы пробовали использовать logback? Это регистратор, созданный специально для поддержки slf4j, и он поддерживает mdc. <dependency><br/> <groupId>ch.qos.logback</groupId><br/> <artifactId>logback-classic</artifactId><br/> <version>0.9.30</version><br/> </dependency><br/> <dependency><br/> <groupId>ch.qos.logback</groupId><br/> <artifactId>logback-core</artifactId><br/> <version>0.9.30</version><br/> </dependency>‹br/›   -  person Software Engineer    schedule 08.06.2013


Ответы (1)


В зависимости от того, чего вы хотите достичь, вы можете вообще избежать пользовательского кода.

Используйте мост JUL-SLF4J

Доступен мост, который подключается к java.util.Logging (JUL) и перенаправляет все события журнала в SLF4J. Использование вывода журнала позволяет использовать любую реализацию ведения журнала SLF4J (например, Logback или Log4j) для записи комбинированного вывода журнала для обоих API ведения журнала.

Используя JUL to SLF4J Bridge, вы получите бесплатную поддержку MDC с любой поддерживающей его реализацией SLF4J.

Написать расширение JUL

Если вы хотите, чтобы системы ведения журнала были разделены, вам необходимо написать расширение JUL, которое «читает» MDC и выводит его значения в журнал. Если вы посмотрите на класс SLF4J MDC, у него есть метод для доступа ко всем его значениям: org.slf4j.MDC.getCopyOfContextMap().

Имейте в виду, что обработчик JUL по умолчанию очень ограничен. Таким образом, я думаю, вам придется реализовать свой собственный, который затем сможет получить доступ к MDC. Однако вам нужно сначала проверить, что они вызываются из одного и того же потока.

person Gunnar    schedule 08.06.2013