本文介紹了是否在單行上有異常的登錄配置?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我的日志被提取、輸送并合并到ElasticSearch中。多行事件很難跟蹤和診斷。
與其使用收集器和正則表達式將異常行分組到單個記錄中,是否可以使用logback configuration將Exception
堆棧跟蹤放在單個行中?
推薦答案
您可以在logback.xml
中為%ex
符號聲明轉換規則,如下所示:
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<conversionRule conversionWord="ex" converterClass="com.foo.CompressedStackTraceConverter" />
...
</configuration>
然后聲明CompressedStackTraceConverter
如下:
import ch.qos.logback.classic.pattern.ThrowableProxyConverter;
import ch.qos.logback.classic.spi.IThrowableProxy;
public class CompressedStackTraceConverter extends ThrowableProxyConverter {
@Override
protected String throwableProxyToString(IThrowableProxy tp) {
String original = super.throwableProxyToString(tp);
// replace the new line characters with something,
// use your own replacement value here
return original.replaceAll("
", " ~~ ");
}
}
只要您的日志記錄模式包含%ex
符號,custom conversion specifier就會起作用。例如,模式如下:
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss}|%-5level|%logger{36}|%msg %ex %n</pattern>
</encoder>
如果您的模式不包括%ex
符號,則堆棧跟蹤是%msg
的一部分,在這種情況下,您可以這樣聲明轉換規則…
<conversionRule conversionWord="msg" converterClass="com.foo.CompressedStackTraceConverter" />
.盡管這將對您的整個日志消息應用CompressedStackTraceConverter
,而不僅僅是它的堆棧跟蹤部分。
這篇關于是否在單行上有異常的登錄配置?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,