2013-05-29 3 views
5

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

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

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

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

This также является кодом, который поможет в этом, но не дает описания.

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

спасибо.

+0

Ненавижу давать ответ «попробуй что-нибудь еще», но ... Пробовали ли вы использовать логин? Это логгер, созданный специально для поддержки slf4j, и он поддерживает mdc. '
ch.qos.logback
Logback-классический
0.9.30


ch.qos.Logback
Logback-жильный
0.9.30
'

ответ

6

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

Используйте июль на SLF4J мост

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

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

Написать удлинительный Юль

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

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