在printStackTrace()上打印完整的调用堆栈?
我需要编写一个小型日志分析器应用程序来处理由我的项目中使用的第三方封闭源库(内部具有自定义记录器)生成的一些日志文件。
如果日志条目中存在异常,我需要收集有关从顶部到异常实际位置的堆栈跟踪中涉及的方法的汇总信息。
不幸的是,默认情况下,Java printStackTrace()不会打印调用堆栈中的每个方法,但达到一定数量,剩下的仅被引用为16 more...
如果我自己能够捕获异常,我会使用getStackTrace()并自己打印它,但根本原因从未包含在此库引发的异常中。
有没有办法让Java打印堆栈跟踪中的整个调用堆栈?
除了我的情况,常见的日志框架可以选择吗?
编辑:该程序在JDK 1.5.0_09的Sun JVM上运行。 无法改变这一点。
这里是对打印轨迹中“由......造成”和“......多”行的解释。 另请参阅用于printStackTrace的JavaDoc。 你可能没有任何工作要做。
请注意包含字符“...”的行的存在。 这些行指示此异常的堆栈跟踪的其余部分与由异常导致的异常(“封闭”异常)导致的异常堆栈跟踪底部的指定帧数相匹配。 这种简写可以在常见情况下大大减少输出的长度,在这种情况下,捕获的异常是由与引发“引发异常”的方法相同的方法抛出的。
你不能用Thread.currentThread().getStackTrace()
做什么吗?
下面是一个简单的例子,它递归地调用一个方法20次,然后抛出当前线程的堆栈。
public class Test {
public static void main(String[] args) {
method();
}
static int x = 0;
private static void method() {
if(x>20) {
StackTraceElement[] elements = Thread.currentThread().getStackTrace();
for(int i=0; i<elements.length; i++) {
System.out.println(elements[i]);
}
}
else {
x++;
method();
}
}
}
也许你可以尝试迭代由以下内容返回的数组:
Thread.currentThread().getStackTrace();
链接地址: http://www.djcxy.com/p/93139.html