2014-04-14 15 views
6

Używam Logback 1.0.13 w aplikacji Scala/Play 2.2.0. Istniejące config wygląda następująco:logback: kontrolowanie formatowania wyjątków stacktraces

<appender name="FILE" class="ch.qos.logback.core.FileAppender"> 
    <file>${application.home}/logs/application.log</file> 
    <encoder> 
    <pattern>%date [%level][%logger{1}][%thread{1}] %message%xException%n</pattern> 
    </encoder> 
    </appender> 

Szukam jeśli istnieje sposób skonfigurować go tak linie wyjątek Traceback mieć dostosowaną separator. Zamiast

play.api.Configuration$$anon$1: Configuration error[Cannot connect to database [default]] 
at play.api.Configuration$.play$api$Configuration$$configError(Configuration.scala:92) ~[play_2.10-2.2.0.jar:2.2.0] 
at play.api.Configuration.reportError(Configuration.scala:570) ~[play_2.10-2.2.0.jar:2.2.0] 
at play.api.db.BoneCPPlugin$$anonfun$onStart$1.apply(DB.scala:252) ~[play-jdbc_2.10-2.2.0.jar:2.2.0] 

Chciałbym umieścić kilka znaków przed każdym wierszu tak:

play.api.Configuration$$anon$1: Configuration error[Cannot connect to database [default]] 
>>> at play.api.Configuration$.play$api$Configuration$$configError(Configuration.scala:92) ~[play_2.10-2.2.0.jar:2.2.0] 
>>> at play.api.Configuration.reportError(Configuration.scala:570) ~[play_2.10-2.2.0.jar:2.2.0] 
>>> at play.api.db.BoneCPPlugin$$anonfun$onStart$1.apply(DB.scala:252) ~[play-jdbc_2.10-2.2.0.jar:2.2.0] 
+0

Nie sądzę, że logback ma coś podobnego natywnie. Prawdopodobnie możesz napisać niestandardowego appendera logowań i spróbować osiągnąć to samo. – Aritra

Odpowiedz

9

Pomyślałem coś jak to działa:

 <pattern>%date [%level][%logger{1}][%thread{1}] 
     %message%replace(%xException){"\n", "\\n"}%nopex%n</pattern> 

Wartość% zastąpić mechanizm działa na tekście stosu. Potrzebujesz również% nopex, aby zapobiec ponownemu wyświetlaniu nieprzetworzonego stosu stacków; w przeciwnym razie Logback "pomocniczo" zauważy, że pominięto śledzenie i zawiera je dla ciebie.

+0

Czy istnieje sposób na uniezależnienie tej platformy? (w systemie Windows istnieje "\ r \ n" separator linii) Logback zawiera% n słowa konwersji, ale nie mam pojęcia, jak go użyć w metodzie replace. –