【发布时间】:2012-09-04 12:37:41
【问题描述】:
我有以下代码:
import org.apache.commons.lang.exception.ExceptionUtils;
public void myMethod() {
try {
// do something
} catch (Exception e) {
System.out.println(ExceptionUtils.getStackTrace(e)); // prints "java.lang.NullPointerException"
System.out.println(ExceptionUtils.getFullStackTrace(e)); // prints "java.lang.NullPointerException"
e.printStackTrace(); // prints "java.lang.NullPointerException"
}
}
我希望看到的输出是完整的堆栈跟踪,其中包含行号和失败的类的层次结构。例如,
Exception in thread "main" java.lang.NullPointerException
at org.Test.myMethod(Test.java:674)
at org.TestRunner.anotherMethod(TestRunner.java:505)
at java.util.ArrayList(ArrayList.java:405)
这段代码正在一个更大的应用程序中运行,该应用程序也有 log4j,但我希望能够将异常转换为字符串,以便我可以将其作为电子邮件发送给 java 开发人员。
有人对如何将完整的堆栈跟踪捕获到字符串有任何想法吗?我不能使用 Thread.currentThread().getStackTrace(),因为这个应用程序在 Java 4 上运行。是什么阻止了上面的代码打印完整的堆栈跟踪?
【问题讨论】:
-
看起来 NPE 中的 StackTraceElement 数组被重置为空。在 NPE 上有什么调用 setStackTrace 的吗?
-
@DanGravell - 不,不应该调用 setStackTrace。
-
你能在 IDE 中调试它吗?可能值得在 catch 块中设置断点以查看异常是否“完美形成”。
-
添加您的
myMethod()的记录输出或您的实际方法。e.printStackTrace();通常应该打印填充轨迹。
标签: java exception logging exception-handling log4j