2016-07-30 28 views
3

Ich versuche, Newline aus Java-Stacktraces zu entfernen.Wie entferne ich Newline aus Java-Stacktraces im Logback?

ich folgende logback Muster haben -

<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %replace(%msg){'\n', ''}%n</pattern> 

Ich erwarte, dass es neue Zeilen in Meldungen zu ersetzen, aber es ist nicht zu tun. Ich sehe Stacktraces mit Zeilenumbrüchen ausgedruckt.

Wenn ich jedoch folgendes Muster verwenden (nur für Testzwecke) -

<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %replace(%msg){'.*', 'x'}%n</pattern> 

Ich finde, dass Nachrichten mit Charakter x sondern Stack-Traces ersetzt werden immer noch gedruckt zu werden wie es ist.

Das macht mich glauben, dass Logback Stacktraces unabhängig behandelt. Ich habe die Logback-Dokumentation durchgelesen, die besagt, dass man sich über (% ex) auf stacktraes beziehen kann.

Aber dann kann ich immer nur ein Muster für den Appender aktiv haben. Wie gehe ich vor um sicherzustellen, dass ich keine neuen Zeilen in Stacktraces bekomme?

Antwort

6

Nach einem Blick auf, wie Logback Formatierer die Zeichenfolge auf meinem Windows-Box baut, ich sah, dass der Stack-Trace enthält \r\n für jede neue Linie, so dass, wenn Sie Windows verwenden, versuchen Sie stattdessen:

<pattern>........ %replace(%ex){'[\r\n]+', '\\n'}%nopex%n</pattern> 

Erläuterungen :

  • \r\n: zuerst habe ich versucht, mit nur %replace(%ex){'\n', 'X'} aber dann in den Protokollen ich hatte die Zeilenendmarke dann ein ‚X‘. Stattdessen werden mit %replace(%ex){'[\r\n]+', ''} alle Vorkommen von \r und \n entfernt. Wenn Sie die Zeichenfolge "\n" anzeigen möchten, um anzugeben, dass hier eine neue Zeile vorhanden war, können Sie im zweiten Parameter %replace hinzufügen.

  • %nopex: Ich weiß nicht, warum, aber wenn Sie %replace auf %ex verwenden, fügt Logback einen zweiten Stack-Trace auf Ihren Eintrag, diesmal mit allen neuen Linien. Unter Verwendung von %nopex (siehe documentation) unterdrückt es diesen zweiten Stapel, indem es die Verwendung eines tatsächlichen Stapels ohne %replace vortäuscht.

+0

die Nopex hat den Trick gemacht – user375868