2010-05-12 58 views
10

假設我有上千行的代碼裏面做一個傳統的Java應用程序:全局日誌捕捉例外五

try { 
    // stuff 
} catch (Exception e) { 
    // eat the exception 
} 

有沒有辦法,我可以翻轉或第三方JAR這將記錄所有「的任何全局選項吃了「例外?我知道我可以做一個大規模的查找替換(搜索catch(Exception e){並將其替換爲catch(Exception e){logException(e);)但我想知道是否有更好的解決方案。謝謝!

回答

7

你也許可以提供你自己的實現Exception,在構造函數中跟蹤。從Java的手冊頁:

-Xbootclasspath:引導類路徑
指定目錄,JAR檔案, 的冒號分隔列表和ZIP壓縮文件搜索啓動類文件。這些代碼是 ,用於替代Java 2中的引導類文件。

+0

+1這是一個有趣的想法。 – Finbarr 2010-05-12 15:34:27

+0

我喜歡它。它是偷偷摸摸的,它可能會工作。 – 2010-05-12 15:34:49

+0

也許不適合心靈的隱隱。 – Raedwald 2013-04-10 10:36:56

0

號如果代碼捕獲異常,並執行與它無關,那麼有什麼可以做,以改變這種狀況不改變代碼。

一個找到替換應該工作。但是,我也強烈建議事後檢查它是否與FindBugs一致,以確保您找到了此問題的所有實例。 (無論如何,FindBugs應該是你的過程的一部分,但是我只是指出它以防止任何人讀到這個文件時就不會使用它)。

+0

面向方面的編程會讓你記錄異常,不改變原代碼,羅布迪馬爾科在他的回答說明(http://stackoverflow.com/questions/2820259/globally-log-catch-exception-e/2820381# 2820381)。 – markusk 2010-05-12 19:32:23

+0

@markusk:採取點;實際上有幾種方法可以做到這一點。我主要爲FindBugs部分留下了這個答案。 – 2010-05-12 19:39:28

+0

在這種情況下,爲什麼不刪除你的答案的第一段?您對FindBugs的建議仍然有用。 – markusk 2010-05-12 20:24:55

0

這將允許您處理任何未捕獲的異常:

Thread.setDefaultUncaughtExceptionHandler(
    new Thread.UncaughtExceptionHandler(){ 
    public void uncaughtException(Thread t, Throwable e) { 
     //handle the exception 
    } 
}); 
+0

但這不是他要求的。 – aioobe 2010-05-12 15:33:58

+1

對錯誤問題的好答案。 OP處理的例外被捕獲,而未被捕獲 – 2010-05-12 19:01:27

5

好像一個地方,面向方面的編程可以派上用場。你可以設置一個異常處理程序切入點。查看AspectJ以獲得更好的AOP實現。

+0

有趣的想法... – JoeGeeky 2010-05-13 21:04:49