我需要编写一个小型的日志分析器应用程序来处理由第三方封闭源代码库(在我的项目中有自定义记录器)生成的一些日志文件。
在日志中出现异常项的情况下,我需要收集有关从顶部到实际异常位置的堆栈跟踪所涉及的方法的聚合信息。
不幸的是,默认情况下,()不打印调用堆栈中的每个方法,而是打印一定数量的方法,其余方法只是作为16 more...引用。
如果我自己能够捕捉到异常,我将使用getStackTrace()并自己打印它,但是根本原因从未包含在这个库抛出的异常中。
有没有一种方法可以让Java在堆栈跟踪中打印整个调用堆栈?
除了我的情况外,常见的日志记录框架也有选择吗?
编辑:这个程序使用JDK运行在Sun的JVM上。没有办法改变这种状况。
发布于 2009-06-25 11:47:36
这里有一个解释的“引起”和.在印刷痕迹中有更多的‘行’。也见JavaDoc for printStackTrace。你可能没有任何工作要做。
注意包含字符“.”的行的存在。这些行表示,此异常的堆栈跟踪的其余部分与由此异常引起的异常的堆栈跟踪底部所指示的帧数相匹配(“包围”异常)。在通常情况下,在捕获“因果异常”的同一方法中抛出包装异常时,这个速记可以大大减少输出的长度。
发布于 2009-06-25 11:42:17
你不能用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();
}
}
}发布于 2009-06-25 11:44:42
可能是,您可以尝试迭代由以下人员返回的数组:
Thread.currentThread().getStackTrace();https://stackoverflow.com/questions/1043378
复制相似问题