检索异常完整堆栈跟踪

12

我试图将项目中的Apache commons lang从2.4升级到3.1。我的实现引用了ExceptionUtil.getFullExceptionTrace(e),但在3.1中已不存在。

移除的原因如下:

"由于一旦达到JDK 1.4就都是无效操作,因此删除isThrowableNested、isNestedThrowable和getFullStackTrace。 LANG-491"

关于这个更改有几个问题:

  1. 我困惑的是,这是否意味着我们需要另寻他径来检索完整的堆栈跟踪,还是可以简单地使用ExceptionUtils.getStackTrace(e)替换它。

  2. 有没有想法在JDK 1.4之后发生了什么变化,导致该方法变得多余?

  3. 我们不能只使用e.toString()吗,其中e是我的异常实例?

谢谢。

1个回答

13

Java 1.4为所有Exception类的父类Throwable类引入了getCause()方法。如果您需要将堆栈跟踪作为字符串获取,可以使用ExceptionUtils.getStackTrace(e)或类似的方式:

  Exception e = ...
  StringWriter sw = new StringWriter();
  e.printStackTrace(new PrintWriter(sw));
  String stack Trace = sw.toString();

请参见有关从 ExceptionUtil 中删除方法的其他讨论:JIRA 问题 LANG-491


谢谢Eugene。讨论列表中提到“getFullStackTrace”似乎没有意义。在1.4+版本中,它只会打印一个项目。那么我该如何获取fullstackTrace呢? - phewataal
1
那么'ExceptionUtils.getStackTrace(e)'是一个等效的解决方案,还是我在这里理解错了什么? - JBA
1
是的,如果仍需要getFullStackTrace,它仍然令人困惑。经过一些研究,我发现getStackTrace()已足够,我们不需要getFullStackTrace(),因为在Java 1.4中引入了所有Throwables都可以链接到原因的概念。一些参考阅读:http://www.dickbaldwin.com/java/Java057.htm和https://issues.apache.org/jira/browse/LANG-904 - supernova

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接