2010-05-30 77 views
5

我寫了一個java類,如果某個方法拋出異常,則會通過java郵件向管理員發送一封電子郵件。當發生異常時發送電子郵件

它的工作原理 - 我的問題是w.r.t優雅 - 捕獲主方法拋出的異常,sendEmail()方法駐留在主方法的catch塊中。 sendEmail()方法有它自己的try-catch塊。

實際上 - 它看起來像下面 - 是否有寫這個更美麗的方式?

try { 
    foo; 
} 
catch { 
    try{ 
    sendEmail(); 
    } 
    catch { 
    log(e.message); 
    } 
} 

回答

3

Java可以嵌套try/catch塊。

如果您願意,可以將try/catch sendmail塊移動到另一個方法。當try/catch塊更復雜時,它會使代碼更容易理解。

19

如果你想要「更優雅」,一個簡單的建議是讓你的sendEmail輔助方法捕獲並記錄電子郵件例外。 (我不想像你想要的異常傳播......或做一些其他的恢復...)


然而,也有一些是更重要說。你在這裏執行的是錯誤的方法報告錯誤。

  • 如果出現嚴重錯誤您的應用程序存在,你將垃圾郵件與多個電子郵件報告過同樣的問題,而過,並在管理員一個機會......

  • 通過發送電子郵件從您的代碼深處,您正在使管理員很難整合您的應用程序的錯誤報告。

更好的方法是通過Java日誌記錄框架(例如Log4J)報告問題。如果管理員想要他/她可以配置某種類型的監控系統,如LogWatch,Nagios等等。這樣的監控系統將檢測和分類各種記錄器流中的錯誤,異常等(如應用程序錯誤),de - 他們,如果管理員配置它通過電子郵件,尋呼機或其他任何發送通知。

+1

+1「記錄+離線操作」確實更好 – JoseK 2010-05-30 06:50:03

+1

+1,始終將應用程序代碼與站點操作監控分開(聯繫管理員等) – 2010-05-30 10:52:25

相關問題