2016-03-23 11 views
0

In meiner Java-App wird Logging als Protokollierungsrahmen verwendet. Die Appen mit dem folgenden Muster konfiguriert (vereinfacht):Protokolleintragsmuster dynamisch unter bestimmten Bedingungen ändern

[CORR=%X{CORR}] [MSG=%msg]%n 

Wie man sehen kann, wird CORR Wert von MDC genommen. Protokolleintrag Beispiel:

[CORR=12342314] [MSG=Some message] 

Es gibt Fälle, wenn das Attribut nicht in MDC gespeichert ist, so Protokolleintrag wie folgt aussieht:

[CORR=] [MSG=Some message] 

Aber sollte sein:

[MSG=Some message] 

Gibt es eine Weg, um diese [CORR=] Teil des Musters vollständig loszuwerden, wenn der entsprechende Wert in MDC fehlt, ohne benutzerdefinierte LayoutBase im erstellen Ergänzungen? Ich versuche Evaluator zu konfigurieren:

<evaluator name="DISPLAY_CORR_EVAL"> 
    <expression>((String) mdc.get("CORR")) != null</expression> 
</evaluator> 

haben aber keine Ahnung, wie es in meinem Fall zu verwenden.

+0

Mit einem benutzerdefinierten Layout, das möglich sein sollte, siehe http://logback.qos.ch/manual/layouts.html –

+0

Gefunden Lösungen ohne benutzerdefiniertes Layout. – Aliaxander

Antwort

3

Das Problem wurde mit Hilfe von replace(p){r, t} Konversionswort Logback gelöst:

Ersetzt Vorkommen von ‚R‘, einem regulären Ausdruck, mit seinem Ersatz ‚T‘ in der Zeichenfolge erzeugt durch die Teilmuster ‚p ". Beispiel: "% ersetzen (% msg) {'\ s",' '} "entfernt alle Leerzeichen in der Ereignismeldung. Das Muster 'p' kann beliebig komplex sein und insbesondere mehrere Umschlüsselungen enthalten. Zum Beispiel ersetzt "% ersetzen (% logger % msg) {'.', '/'}" Alle Punkte im Logger oder die Nachricht des Ereignisses mit einem Schrägstrich.

Mein Muster sieht nun wie folgt aus:

%replace([CORR=%X{CORR}]){'\[CORR=\]', ''}[MSG=]%n 

wenn CORR leer ist, [CORR=] Matches r regex und somit durch leere Zeichenkette ersetzt.