gpt4 book ai didi

java - 根据条件截断记录器中异常的堆栈跟踪

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:22:06 26 4
gpt4 key购买 nike

我正在使用 slf4j 在控制台和自定义文件中记录自定义异常及其堆栈跟踪。我遇到了一种情况,我不得不截断一些非关键异常的堆栈跟踪。

使用 this documentation ,我在我的logback.xml文件中添加了如下配置

<evaluator name="DISPLAY_EX_EVAL">
<expression>throwable != null &amp;&amp; throwable instanceof com.abc.NonCriticalException</expression>
</evaluator>

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%-30(%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread]) %-5level
%logger{150} -%msg%n%ex{full, DISPLAY_EX_EVAL}
</pattern>
</encoder>
</appender>

但是,上面的配置在记录配置的异常期间删除了所有堆栈跟踪。有没有办法记录匹配异常的截断堆栈跟踪(1 或 2 行)?

最佳答案

有一个开源库(由我编写)提供智能堆栈跟踪过滤。我在自己的项目中使用它,效果很好。这是关于图书馆的文章:Open-Source Java Library With Stack Trace Filtering, Silent String Parsing, and Version Comparison .专门查找段落“Stack Trace Noise Filter”。基本上它根据您设置的您感兴趣的包前缀过滤堆栈跟踪。您可以找到图书馆 Maven artifact或在 Github 上(包括源代码和javadoc)。这是 Javadoc .这是一个例子。假设您的代码位于包“com.plain.*”中。因此,如果您将前缀设置为“com.plain.”而不是原始堆栈跟踪:

at com.plain.BookService.listBooks()
at com.plain.BookService$FastClassByCGLIB$e7645040.invoke()
at net.sf.cglib.proxy.MethodProxy.invoke()
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint()
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed()
at com.plain.LoggingAspect.logging()
at sun.reflect.NativeMethodAccessorImpl.invoke0()
at sun.reflect.NativeMethodAccessorImpl.invoke()
at sun.reflect.DelegatingMethodAccessorImpl.invoke()
at java.lang.reflect.Method.invoke()
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs()
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod()
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke()
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
at org.springframework.aop.interceptor.AbstractTraceInterceptor.invoke()
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke()
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke()
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept()
at com.plain.BookService$EnhancerByCGLIB$7cb147e4.listBooks()
at com.plain.web.BookController.listBooks()

将替换为:

at com.plain.BookService.listBooks()
at com.plain.BookService$FastClassByCGLIB$e7645040.invoke()
at net.sf.cglib.proxy.MethodProxy.invoke()
...
at com.plain.LoggingAspect.logging()
at sun.reflect.NativeMethodAccessorImpl.invoke0()
...
at com.plain.BookService$EnhancerByCGLIB$7cb147e4.listBooks()
at com.plain.web.BookController.listBooks()

该实用程序适用于整个堆栈跟踪,包括“由”和“抑制”部分,以及过滤可以即时完成(来自异常本身)或来自包含原始堆栈跟踪的字符串

关于java - 根据条件截断记录器中异常的堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53256622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com