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

Abh*_*hek 5 java logging exception logback slf4j

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

使用此文档,我在我的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>
Run Code Online (Sandbox Code Playgroud)

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

Rae*_*ald 0

但为什么要截断堆栈跟踪呢?为什么不记录完整的堆栈跟踪。毕竟,这是重要且有用的信息。正确的?

我猜您认为必须记录所有异常的堆栈跟踪。这是一个错误。您应该仅记录指示被调用代码中存在错误(意外异常)的异常的堆栈跟踪。当然,您的程序记录这些堆栈跟踪的情况应该不常见,当这种情况发生时,您将需要完整的堆栈跟踪来帮助您调试问题。