2012-05-11 219 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