2014-07-07 3 views
5

Wie drucke ich nur dann ein Schlüssel/Wert-Paar auf einem log4j-Eintrag, wenn der Wert auf MDC gesetzt ist?Wie kann ich Text von MDC in einem LOG4J-Muster bedingt hinzufügen?

Zum Beispiel, ich habe zur Zeit das folgende Muster:

%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - client=%X{client} %m%n 

Ich mag würde den „client =“ Teil drucken nur, wenn es ein Wert auf MDC für diesen Schlüssel ist.

Zum Beispiel, wenn mein Programm zu starten, wird es kein Client angemeldet sein, um Protokolle mit diesem Muster aufgezeichnet werden würden:

%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 

jedoch, nachdem der Client angemeldet hat (und nachdem ich eingestellt habe das MDC mit einem „Client“ Taste), muss ich es mit dem folgenden drucken:

%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - client=%X{client} %m%n 

gibt es eine solche „bedingte Muster“ auf log4j?

Danke

+0

Ich weiß nicht, ein solches Feature, auch in Log4j2 ... Wenn kein Wert ist für Der zu protokollierende Schlüssel '% X {client}' erzeugt eine leere Zeichenfolge. Warum entfernen Sie 'client =' nicht aus Ihrem Muster oder fügen Sie 'c =' string prefix in Ihrem Wert hinzu? – xav

+0

Hm das könnte möglich sein! Ich werde das versuchen, wenn ich morgen ins Büro komme. – Matheus208

Antwort

3

I Xav Vorschlag mit endend auf.

Ich habe die Zeichenfolge "client =" aus dem log4j-Muster entfernt und jedes Mal hinzugefügt, wenn ich einen Eintrag zu MDC hinzugefügt habe. Es ist nicht die schönste Lösung, aber es hat super funktioniert!

Zum Beispiel, wo ich sonst

MDC.put("client", client.getId()); 

ich jetzt verwenden würde bin mit:

MDC.put("client", "client="+client.getId().toString()); 
Verwandte Themen