2009-06-02 19 views
4

Très simple, est-ce que Log4j SyslogAppender prend en charge MDC et NDC en ce sens que la sortie est constituée de données structurées, c'est-à-dire utilise les fonctions de données structurées du protocole?Log4j SyslogAppender prend-il en charge MDC et NDC

De plus, y a-t-il des limites à ce qui peut être ajouté au MDC et ajouté au journal?

Répondre

7

MDC et NDC font partie du protocole Syslog. Ainsi, log4j ne supporte pas (et ne peut pas) MDC/NDC dans les données structurées du protocole Syslog. Toutefois, rien ne vous empêche d'ajouter des données MDC ou NDC dans la partie "message" du message syslog en définissant le paramètre ConversionPattern pour inclure l'information MDC.

Voici un exemple pour une entrée MDC avec la touche "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 

Pour NDC, vous devez remplacer « % X {ki} avec juste "% x"(notez l'utilisation de bas cas).

Quant à la deuxième partie de votre question, il n'y a pas de limites aux valeurs que vous pouvez placer dans les MDC ou NDC.

+6

quelqu'un pourrait penser que ce gars avait écrit log4j ou quelque chose –

+2

Gareth Davis: en fait, il l'a fait. – cherouvim

1

En regardant le code source, je ne vois pas pourquoi il ne devrait pas.

Avez-vous essayé d'écrire avec succès sur syslog, puis d'écrire avec quelque chose dans votre NDC/MDC? Notez que vous devrez activer ceci dans le PatternLayout (en utilisant% x ou% X).

Le MDC ne semble pas avoir de limitations sur ce que vous pouvez insérer (encore une fois, en fonction de l'inspection du code source). Je soupçonne que l'écriture MDC va simplement effectuer un toString() sur le contenu du MDC, et donc vous pouvez être limité simplement par l'utilité/lisibilité de vos objets lorsqu'ils sont rendus de cette façon.

+0

Est-ce que il suffit d'ajouter la valeur MDC au message de journal, ou serait-il sortie données structurées, mon souci est d'analyser les données structurées par la suite –

+0

Cela dépend de l'implémentatio n de votre objet MDC-tenu (notez que vous utilisez% X avec une clé - voir le doc) –