java - Logback 配置在单行上有异常?

标签 java logging logback slf4j

我的日志被提取、传输并整合到 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/

相关文章:

java - 使用java向impala表中插入数据

c++ - 需要 API 将日志消息发送到服务器

django - 如何添加到 Django 的默认日志记录?

docker:配置日志记录选项

spring-boot - 用于 JSON 中日志输出的 Spring Boot YML 配置

java - 如何在 RelativeLayout 中将按钮居中放置在 FrameLayout 的底部

java - 更快地计算余弦相似度

java - python 和 Java 中 while 循环中的表达式与赋值?

groovy - 如何使用通过groovy通过logback.groovy配置的logback

java - 有什么理由让新项目使用 log4j 而不是 Logback?