乐趣区

关于java:在SpringBoot中使用logback优化异常堆栈的输出

一、背景

在咱们在编写程序的过程中,无奈保障本人的代码不抛出异样。当咱们抛出异样的时候,通常会将整个异样堆栈的信息应用日志记录下来。通常一整个异样堆栈的信息是比拟多的,而且存在一些没用的信息。那么咱们如何优化一些异样堆栈的信息打印,过滤掉不必要的信息呢?

二、需要

1、现有的异样堆栈信息

2、咱们想优化成如下

三、应用的技术

1、此处咱们是在 SpringBoot 中应用 logback 来实现日志的打印。
2、默认状况下,重写异样堆栈的打印比较复杂,此处咱们采纳第三方实现 ogstash-logback-encoder 来实现。

3、那么此处咱们就采纳 ogstash-logback-encoderShortenedThrowableConverter来实现。这个能够在 以 json 格局的日志输入中应用 ,也能够 应用到非 json 格局的日志中应用。咱们将会用在以非 json 格局日志的输入。

四、技术实现

1、引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- 引入此 jar 包,能够将日志以 json 的格局输入,能够简化异样信息的输入 -->
<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>7.1.1</version>
</dependency>

留神:
应用 logstash-logback-encoder 有一些依赖项,我以后应用的依赖项如下:

1、如果产生了异样

2、jdk 的版本依赖


版本不同,可能依赖的版本也不一样,举荐查看官网网址:https://github.com/logfellow/logstash-logback-encoder#java-version-requirements

2、代码实现

3、应用 ShortenedThrowableConverter 来优化异样堆栈

1、新建 logback-spring.xml配置文件
2、通过 conversionRule 来应用


3、具体用法


参数解释:

stack{100,16,2048,rootFirst,regex1,regex2,evaluatorName}
        参数解释:倡议查看源码 net.logstash.logback.stacktrace.ShortenedThrowableConverter#parseOptions() 办法
            第 1 参数:maxDepthPerThrowable:值能够是 full 或者 short 或者 int 值,示意每个异样最多打印多少个 stackTraceElements 元素
            第 2 参数:shortenedClassNameLength:值能够是 full 或者 short 或者 int 值,将尝试将类名长度缩短到小于此值
                     com.huan.springboot.service.ExceptionService 可能会变成 c.h.s.s.ExceptionService
            第 3 参数:maxLength:值能够是 full 或者 short 或者 int 值,指的输入到日志中整个堆栈最大能存在多少个字符。前面这些参数没有固定程序
            第 4 参数:rootFirst:可选参数,如果应用该参数,值就是 rootFirst , 示意应首先打印堆栈的根本原因
            第 5 参数:inlineHash:可选参数,如果应用该参数,值就是 inlineHash, 批示应该计算和内联十六进制谬误哈希
            如果参数都不是上方的类型,那么可能是 evaluator 或者 exclude 类型,这 2 个都是判断这个 stackTraceElement 是否应该被打印,这 2 个参数没有程序关系
                evaluator:值的是须要实现 EventEvaluator<ILoggingEvent> 的类
                exclude:指的是须要排除的正则表达式,如果存在. 须要本义成 \.

4、查看运行后果


和咱们的需要比照,发现曾经实现了咱们想要的后果,这样异样堆栈信息也简化了

五、残缺代码

https://gitee.com/huan1993/spring-cloud-parent/tree/master/springboot/springboot-logback-json-optimize-exception

六、参考文档

1、https://github.com/logstash/logstash-logback-encoder
2、https://github.com/logfellow/logstash-logback-encoder/blob/main/stack-hash.md
3、https://www.srccodes.com/shorten-logger-name-customize-optimize-exception-stack-traces-logback-logstashencoder-shortenedthrowableconverter/

退出移动版