在抛出异常时发送电子邮件

use*_*829 5 java exception-handling

我编写了一个java类,如果方法抛出异常,则会通过java邮件向管理员发送一封电子邮件.

它有效 - 我的问题是优雅 - 为了捕获main方法抛出的异常,sendEmail()方法驻留在main方法的catch块中.sendEmail()方法有自己的try-catch块.

实际上 - 它看起来像下面 - 是否有更美妙的写作方式?

try {  
    foo;  
}  
catch {  
   try{  
    sendEmail();  
  }  
  catch {  
   log(e.message);  
  }  
}  
Run Code Online (Sandbox Code Playgroud)

Ste*_*n C 20

如果你想要"更优雅"的东西,一个简单的建议是让你的sendEmail帮助方法捕获并记录电子邮件异常.(我不认为你想要例外传播......或做一些其他的恢复......)


但是,有一些更重要的事情要说.您在此处实施的是报告错误的错误方法.

  • 如果您的应用程序出现严重错误,您可能会通过多封电子邮件向管理员发送垃圾邮件,报告相同的问题,以及结束...

  • 通过从代码深处发送电子邮件,您使管理员难以集成应用程序的错误报告.

更好的方法是通过Java日志框架(如Log4J)报告问题.如果管理员想要他/她可以配置某种监控系统,如LogWatch,Nagios等,这样的监控系统将检测和分类各种记录器流中的错误,异常等(如应用程序的错误),de - 他们,如果管理员配置它通过电子邮件,寻呼机或其他任何方式发送通知.


Gil*_*anc 3

Java 可以有嵌套的 try/catch 块。

如果您愿意,可以将 try / catch sendmail 块移至另一个方法。当try/catch块比较复杂时,会让代码更容易理解。