我只想在程序中记录异常的前几行。我知道,我可以执行以下操作以仅打印stacktrace的前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(或更精确地说,是在log4j上使用slf4j)进行日志记录。有没有办法告诉log4j它应该只打印stacktrace的前5行?
最佳答案
您可以在log4j中使用EnhancedPatternLayout来格式化堆栈跟踪。
请参阅http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/EnhancedPatternLayout.html,特别是模式表中有关“可抛出”模式的部分。
请注意,对%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/