java - Log4j 格式化 : Is it possible to truncate stacktraces?

标签 java logging log4j stack-trace

我只想在我的程序中记录前几行异常。我知道,我可以这样做来只打印堆栈跟踪的前 5 行:

Throwable e = ...;
StackTraceElement[] stack = e.getStackTrace();
int maxLines = (stack.length > 4) ? 5 : stack.length;
for (int n = 0; n < maxLines; n++) {
    System.err.println(stack[n].toString());
}

但我宁愿使用 log4j(或者更准确地说是 slf4j 而不是 log4j)进行日志记录。有没有办法告诉 log4j 它应该只打印堆栈跟踪的前 5 行?

最佳答案

您可以在 log4j 中使用 EnhancedPatternLayout 来格式化您的堆栈跟踪。

http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/EnhancedPatternLayout.html ,特别是模式表中关于“可 throw ”模式的部分。

请注意,对 %throwable{n} 的支持是相当新的,至少需要 log4j 1.2.16(这是撰写本文时的最新版本)

出于跟踪目的,这是处理其实现的票证: https://issues.apache.org/bugzilla/show_bug.cgi?id=48902

关于java - Log4j 格式化 : Is it possible to truncate stacktraces?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3263741/

相关文章:

logging - 部署在 .meteor.com 上,但它总是关闭。请向我解释一下这个错误日志

Spring Security 身份验证日志记录

java - textView 中的 Android HTML,图像大小

java - 当它与 mvn 和 jenkins 一起运行时,如何添加信息进行测试?

java - 仅当 Jpanel 大小已满时才显示 Jtable 滚动条

python - 如何关闭日志缓冲区以使用python命令行工具实时获取日志?

java - 如何使用 MDC 在 log4j2 中动态创建日志文件名

java - Spring项目中同时使用log4j2和log4j

java - 如何编写返回 List<classname> 的方法?

java - 为什么 == 与 Integer.valueOf(String) 的比较对于 127 和 128 给出不同的结果?