2009-06-02 3 views
4

Einfach wirklich, unterstützt Log4j SyslogAppender MDC und NDC in dem Sinne, dass die Ausgabe strukturierte Daten, d. H. Verwendet die strukturierten Daten Features des Protokolls?Unterstützt Log4j SyslogAppender MDC und NDC

Gibt es darüber hinaus Einschränkungen, was in das MDC eingefügt und erfolgreich an das Protokoll angehängt werden kann?

Antwort

7

MDC und NDC sind Teil des Syslog-Protokolls. Log4j unterstützt daher MDC/NDC innerhalb der strukturierten Daten des Syslog-Protokolls nicht (kann es auch nicht). Nichts hindert Sie jedoch daran, MDC- oder NDC-Daten im "Nachrichten" -Teil der Syslog-Nachricht hinzuzufügen, indem Sie den ConversionPattern-Parameter so einstellen, dass er MDC-Informationen enthält. Hier

ist ein Beispiel für eine MDC-Eingabe mit der Taste "ki":

log4j.rootLogger=INFO, SYSLOG 
log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender 
log4j.appender.SYSLOG.SyslogHost=a.host.name 

# Facility must be one of the case-insensitive strings: 
# KERN, USER, MAIL, DAEMON, AUTH, SYSLOG, LPR, NEWS, UUCP, CRON, 
# AUTHPRIV, FTP, LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, 
# LOCAL7 
log4j.appender.SYSLOG.facility=KERN 

log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout 
log4j.appender.SYSLOG.layout.ConversionPattern=%r %p %c %X{ki} - %m\n 

Für NDC, würden Sie „% X {ki} mit nur "ersetzen% x"(beachten Sie die Verwendung von niedrigeren Fall).

Was den zweiten Teil Ihrer Frage, gibt es keine Grenzen für die Werte, die Sie innerhalb von MDC oder NDC platzieren können.

+6

jemand würde denken, dieser Typ hatte log4j oder etwas geschrieben –

+2

Gareth Davis: tatsächlich tat er. – cherouvim

1

Mit Blick auf den Quellcode sehe ich keinen Grund, warum es nicht sollte.

Haben Sie erfolgreich versucht, in syslog zu schreiben und dann mit etwas in Ihrem NDC/MDC zu schreiben? Beachten Sie, dass Sie dies in der PatternLayout aktivieren müssen (mit% x oder% X).

Das MDC scheint keine Einschränkungen hinsichtlich der einzufügenden Optionen zu haben (wiederum basierend auf der Überprüfung des Quellcodes). Ich vermute, das MDC-Schreiben wird einfach einen toString() auf den Inhalt des MDC durchführen, und so kann es sein, dass Sie einfach dadurch eingeschränkt sind, wie nützlich/lesbar Ihre Objekte sind, wenn sie auf diese Weise gerendert werden.

+0

Würde der MDC-Wert in die Log-Nachricht, die einfach hinzufügen oder würde es ausgegeben Strukturierte Daten Mein Anliegen ist es, die strukturierten Daten anschließend zu analysieren. –

+0

Das hängt von der Implementierung ab n von Ihrem MDC-gehaltenen Objekt (beachten Sie, dass Sie% X mit einem Schlüssel verwenden - siehe das Dokument) –