2013-05-29 25 views
5

Mam konfigurację mechanizmu rejestrowania za pomocą Slf4j i java.util.Logging. Mam kilka wątków, więc nie jestem w stanie uzyskać jasnego pomysłu z dzienników, ponieważ są one mieszane. Teraz próbuję użyć pojęcia MDC, aby dodać więcej danych do pliku dziennika, aby były jasne.Obsługa MDC (mapowanego kontekstu diagnostycznego) dla JUL (Java.util.Logging)

Problem jest taki sam jak w Slf4j, chociaż obsługuje MDC java.util.Logging nie. Ale mówi

Jeśli podstawowa struktura nie oferuje MDC, na przykład java.util.logging, następnie SLF4J nadal będzie przechowywać dane MDC ale informacje w nich będą musiały być pobierane za pomocą kodu użytkownika niestandardowego.

Próbuję znaleźć sposób na wykonanie tego niestandardowego kodu. Googling nie pomaga mi zbytnio. W Slf4j znajduje się klasa pomocnicza o nazwie "BasicMDCAdapter". Ale nie wiem, jak z niego korzystać. Nie mogłem znaleźć przykładowego kodu w dowolnym miejscu.

This jest również kod, aby pomóc w tym, ale nadal nie daje trochę opisu.

Doceniam pomoc którejś z osób tutaj.

Dziękuję.

+0

Nienawidzę udzielać odpowiedzi "próbuję czegoś innego", ale ... Czy próbowałeś używać logowania? Jest to rejestrator zbudowany specjalnie pod kątem obsługi slf4j i obsługuje mdc. '
ch.qos.logback
logback-classic
0.9.30


ch.qos.logback
logback-core
0.9.30
'

Odpowiedz

6

W zależności od tego, co chcesz osiągnąć, możesz w ogóle uniknąć niestandardowego kodu.

Użyj lipca do slf4j Most

jest most dostępny że haki do java.util.logging (lip) i przekazuje wszystkie zdarzenia dziennika do slf4j. Korzystanie z wyjścia dziennika umożliwia użycie dowolnej implementacji rejestrowania SLF4J (takiej jak Logback lub Log4j) do zapisania połączonego wyjścia dziennika dla obu interfejsów API do rejestrowania.

Korzystanie z mostu JUL do SLF4J otrzymasz wsparcie MDC za darmo z dowolną implementacją SLF4J.

napisać rozszerzenie lip

Jeśli chcesz zachować systemy rejestrowania oddzielone wtedy musiałby napisać rozszerzenie lip który „czyta” MDC i swoje wartości wyjściowych w dzienniku. Jeśli zajrzysz do klasy MDF SLF4J, ma ona metodę dostępu do wszystkich jej wartości: org.slf4j.MDC.getCopyOfContextMap().

Należy pamiętać, że domyślna procedura obsługi JUL jest bardzo ograniczona. Dlatego myślę, że musiałbyś zaimplementować swój własny, który mógłby następnie uzyskać dostęp do MDC. Najpierw jednak musisz sprawdzić, czy są wywoływane z tego samego wątku.