如何在Java的堆栈跟踪中只打印前几个堆栈



我们正在使用Log4j和Slf4j。在应用程序日志中,有时我们需要堆栈跟踪来判断什么是错误,但是整个堆栈跟踪可能太过冗长,以致于压倒了日志并损害了性能。我想知道是否有一种方法可以做到如下所示:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger LOG = LoggerFactory.getLogger(FOO.class);
catch (Exception e) {
LOG.error("Error in handling the request", e.getTopStacks(10));
}

我认为这比记录完整的异常要好,因为堆栈跟踪特别是从RPC处理(RPC框架中的调用和包装器)抛出的,你知道)可能需要20-30行甚至更多。它比只记录e.getMessage()要好,因为应用程序不是由一个人编写的。很难确保所有异常都有有意义的消息。

和现有的轮子从流行的公共实用程序库,如guava或apache.commons?提前感谢!

您不应该限制代码中的堆栈跟踪行数:每次格式更改都需要对代码进行数百次修改。记录整个异常:

LOG.error("Error in handling the request", e);

您可以通过向日志记录器添加%ex{n}%xEx{n}%rEx{n}模式来限制记录的堆栈跟踪行数,其中n是行数(参见文档)。例如:

<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n%rEx{10}"/>

将打印不超过10行堆栈跟踪信息。

调用e.t getstacktrace(),遍历打印每个元素的结果,当您认为已经打印足够时停止。

相关内容

  • 没有找到相关文章

最新更新