2010-05-30 112 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