在SpringBoot中使用logback优化异常堆栈的输出
2022-05-09 10:03
651 查看
一、背景
在我们在编写程序的过程中,无法保证自己的代码不抛出异常。当我们抛出异常的时候,通常会将整个异常堆栈的信息使用日志记录下来。通常一整个异常堆栈的信息是比较多的,而且存在一些没用的信息。
那么我们如何优化一些异常堆栈的信息打印,过滤掉不必要的信息呢?
二、需求
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、查看运行结果
和我们的需求对比,发现已经实现了我们想要的结果,这样异常堆栈信息也简化了。
五、完整代码
六、参考文档
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输出myabtis的sql日志到数据库
- 关于spring整合hibernate使用update无异常但没有效果(不输出sql语句)
- 使用springboot遇到的的异常
- Spring Boot中使用AOP统一处理web层异常的方法
- 在logback、log4j等日志输出工具中输出java异常调用堆栈
- Spring boot使用logback实现日志的记录
- spring-boot统一处理返回给前台的数据格式(避免返回异常堆栈信息,干扰用户体验)
- Spring Boot 使用 全局异常捕捉
- SpringBoot使用logback
- Spring Boot中使用Actuator的/info端点输出Git版本信息
- SpringBoot使用devtools导致的类型转换异常
- Spring Boot 使用 logback、logstash、ELK 记录日志文件的方法
- 解决Spring boot使用Quartz时Job中无法注入Bean 空指针异常问题
- springboot中使用logback
- 详解Spring Boot下使用logback 记录多个文件日志
- spring boot优化异常处理
- Spring Boot实战之配置使用Logback进行日志记录
- SpringBoot学习:使用logback进行日志记录
- logback使用(springboot 和springmvc)
- 使用log4j(和spring boot logback很相似)向logstash发送数据