我的日志被提取、传输并整合到 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("\n", " ~~ ");
}
}
这custom conversion specifier只要您的日志记录模式包含 %ex
符号,就会起作用。例如,这样的模式:
<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
应用于整个日志消息的效果,而不仅仅是它的堆栈跟踪部分。
关于java - Logback 配置在单行上有异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47771611/