2013-05-29 21 views
5

Ho una configurazione del meccanismo di registrazione con Slf4j e java.util.Logging. Ho diversi thread quindi non sono in grado di ottenere una chiara idea dai log poiché sono misti. Ora provo a usare il concetto MDC per aggiungere altri dati con il file di registro in modo che siano chiari.Supporto MDC (Mapped Diagnostic Context) per JUL (Java.util.Logging)

Il problema è come in Slf4j sebbene supporti MDC java.util.Logging no. Ma si dice

Se il quadro di fondo non offre MDC, per esempio java.util.logging, quindi SLF4J sarà ancora memorizzare i dati del MDC, ma le informazioni in esso dovrà essere recuperato dal codice utente personalizzato.

Sto cercando un modo per eseguire questo codice personalizzato. Googling non mi aiuta molto. Esiste una classe helper in Slf4j denominata "BasicMDCAdapter". Ma non so come usarlo. Non sono riuscito a trovare un codice di esempio da nessuna parte.

This è anche un codice per aiutare con questo, ma ancora non dà un po 'di descrizione.

Apprezzo un aiuto da qualcuno qui.

Grazie.

+0

Odio dare la risposta "prova qualcos'altro", ma ... Hai provato a usare il logback? È un logger creato appositamente per supportare slf4j e ha il supporto mdc. '
ch.qos.logback
logback-classico
0.9.30


ch.qos.Logback
logback-core
0.9.30
'

risposta

6

A seconda di ciò che si desidera ottenere, è possibile evitare il codice personalizzato.

Utilizzare il luglio per SLF4J Ponte

Il è un ponte a disposizione che si aggancia in java.util.logging (luglio) e in avanti tutti gli eventi del registro a SLF4J. L'utilizzo dell'output del registro consente di utilizzare qualsiasi implementazione di registrazione SLF4J (come Logback o Log4j) per scrivere l'output di registro combinato per entrambe le API di registrazione.

Utilizzando il ponte da JUL a SLF4J riceverai il supporto MDC gratuitamente con qualsiasi implementazione SLF4J che lo supporti.

Scrivi un'estensione luglio

Se si desidera mantenere i sistemi di registrazione separati allora si avrebbe bisogno di scrivere un'estensione luglio, che "legge" il MDC e di uscita dei suoi valori nel registro. Se si esamina la classe MDC SLF4J, ha un metodo per accedere a tutti i suoi valori: org.slf4j.MDC.getCopyOfContextMap().

Ricordare che il gestore JUL predefinito è molto limitato. Quindi penso che dovresti implementare il tuo, che potrebbe quindi accedere a MDC. Tuttavia, è necessario prima verificare che vengano chiamati dallo stesso thread.