我需要写一个小日志分析器应用程序来处理由第三方生成的一些日志文件闭源库(内有自定义记录器)在我的项目中使用。
在日志中的例外项的情况下,我需要收集从顶部沿堆栈跟踪涉及到异常的实际到位的方法汇总信息。
不幸的是,默认的Java的printStackTrace()不调用堆栈,但高达每打印方法到一定数量,其余的只是引用为16 more...
。
如果我能捕捉到了异常自己,我会使用的getStackTrace(),并打印自己,但根本原因是从来没有包括在这个库中抛出异常。
有没有办法要求的Java打印的堆栈跟踪整个调用栈?
除了我的情况做普通日志框架有这个选项?
编辑:该项目在Sun与JDK 1.5.0_09 JVM上运行。 没有选项来改变这种状况。
这里是一个解释的“引起”和“... n多”在印刷迹线。 还看到了的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();