logback:控制异常堆栈跟踪的格式

8

我正在一个Scala/Play 2.2.0应用中使用Logback 1.0.13。 现有的配置如下:

  <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>

我希望您可以配置它,使异常回溯行具有自定义分隔符。与其用

作为分隔符,我们可以使用其他符号来代替。
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]

我想在每一行前面加上一些字符,就像这样:

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]

我认为logback本身没有这种功能。您可以编写一个自定义的logback appender,并尝试实现类似的功能。 - Aritra
1个回答

15
我想到了这样的方法能够起作用:
       <pattern>%date [%level][%logger{1}][%thread{1}] 
         %message%replace(%xException){"\n", "\\n"}%nopex%n</pattern>  

%replace 机制作用于堆栈跟踪文本。您还需要使用 %nopex 来防止原始堆栈跟踪再次出现;否则 Logback 将“有帮助地”注意到您省略了跟踪,并为您包含它。


有没有办法使这个程序独立于平台?(在Windows上有"\r\n"行分隔符)Logback有%n转换词,但我不知道如何在replace方法中使用它。 - Vlasta Dolejs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接