2012-05-11 158 views
3

我想在我的项目中将Apache commons lang从2.4升级到3.1。我的实现引用了ExceptionUtil.getFullExceptionTrace(e),它在3.1中不再存在。 拆除的原因被列为检索异常全堆栈跟踪

“删除isThrowableNested,isNestedThrowable和getFullStackTrace 因为他们是所有类型的无操作,一旦你得到了JDK 1.4。LANG-491”

。围绕这一变化 几个问题:

  1. 我很困惑,如果这意味着我们需要探索一些其他的方式来获取完整的堆栈跟踪,或者我们可以简单地用ExceptionUtils.getStackTrace(E),而不是替代。

  2. 对jdk 1.4后发生了什么变化有任何想法,使该方法是多余的?

  3. 我们不能简单地做e.toString(),其中e是我的Exception实例吗?

由于

回答

5

爪哇1.4中引入上的Throwable类getCause()方法,其是所有异常类母体。如果你需要得到一个堆栈跟踪作为一个字符串,你可以使用ExceptionUtils.getStackTrace(e)或像这样:

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

查看有关通过ExceptionUtil上JIRA issue LANG-491去除方法进一步讨论。

+0

谢谢尤金。讨论中列出了“getFullStackTrace没什么意义,在1.4+中它只能打印一个项目”。那么我如何获得完整的堆栈跟踪? – phewataal

+0

已更新我的回答 –

+0

那么'ExceptionUtils.getStackTrace(e)'是一个等价的解决方案呢,还是我在这里弄错了什么? – JBA