如何在SpringBoot中使用logback优化异常堆栈的输出详解

 更新时间:2022年05月13日 09:20:51   作者:huan1993  
最近项目中整合了logback,所以下面这篇文章主要给大家介绍了关于如何在SpringBoot中使用logback优化异常堆栈的输出,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

一、背景

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

二、需求

1、现有的异常堆栈信息

2、我们想优化成如下

三、使用的技术

1、此处我们是在SpringBoot中使用logback来实现日志的打印。

2、默认情况下,重写异常堆栈的打印比较复杂,此处我们采用第三方实现 ogstash-logback-encoder 来实现。

3、那么此处我们就采用 ogstash-logback-encoder 的 ShortenedThrowableConverter来实现。这个可以在以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/

总结

到此这篇关于如何在SpringBoot中使用logback优化异常堆栈的输出的文章就介绍到这了,更多相关SpringBoot logback优化异常堆栈输出内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SSM项目中配置LOG4J日志的方法

    SSM项目中配置LOG4J日志的方法

    本篇文章主要介绍了SSM项目中配置LOG4J日志的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Mybatis-plus出现数据库id很大或者为负数的解决

    Mybatis-plus出现数据库id很大或者为负数的解决

    本文主要介绍了Mybatis-plus出现数据库id很大或者为负数的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • java 中JFinal getModel方法和数据库使用出现问题解决办法

    java 中JFinal getModel方法和数据库使用出现问题解决办法

    这篇文章主要介绍了java 中JFinal getModel方法和数据库使用出现问题解决办法的相关资料,需要的朋友可以参考下
    2017-04-04
  • Java实现堆排序(大根堆)的示例代码

    Java实现堆排序(大根堆)的示例代码

    这篇文章主要介绍了Java实现堆排序(大根堆)的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • java web开发中大量数据导出Excel超时(504)问题解决

    java web开发中大量数据导出Excel超时(504)问题解决

    开发测试时候导入数据遇到大数据导入的问题,整理了下,需要的朋友可以参考下
    2017-04-04
  • 详解解决IDEA2020.1版本的lombok插件问题

    详解解决IDEA2020.1版本的lombok插件问题

    这篇文章主要介绍了详解解决IDEA2020.1版本的lombok插件问题。文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • JavaScript 与 Java 区别介绍  学java怎么样

    JavaScript 与 Java 区别介绍 学java怎么样

    JavaScript 是一种嵌入式脚本文件,直接插入网页,有浏览器一边解释一边执行。而java 语言不一样,他必须在JAVA虚拟机上运行。而且事先需要进行编译。接下来脚本之家小编给大家揭晓js与java区别,感兴趣的朋友一起看看吧
    2016-09-09
  • Spring Security常用过滤器实例解析

    Spring Security常用过滤器实例解析

    这篇文章主要介绍了Spring Security常用过滤器实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 一文带你了解Spring中@Enable开头注解的使用

    一文带你了解Spring中@Enable开头注解的使用

    前面的文章给大家介绍 Spring 的重试机制的时候有提到过 Spring 有很多 @Enable 开头的注解,平时在使用的时候也没有注意过为什么会有这些注解,今天就给大家介绍一下
    2022-09-09
  • SpringBoot自定义消息转换器的实现与应用

    SpringBoot自定义消息转换器的实现与应用

    Spring Boot 默认提供了多种消息转换器,如 Jackson 用于 JSON 格式转换、JAXB 用于 XML 格式转换等,然而,实际开发中往往需要根据业务需求进行自定义的消息转换器,文将详细介绍如何在 Spring Boot 中实现自定义消息转换器,探讨其工作原理、配置方式以及实际应用场景
    2025-01-01

最新评论