views:

88

answers:

2

Hi:

I have written a java class where if a method throws an exception, an email is sent, via java mail, with a report to the administrators.

It works - my question is w.r.t elegance - to catch the exception thrown by the main method, the sendEmail() method resides in the catch block of the main method. The sendEmail() method has its own try-catch block.

In effect - it looks like below - is there a more beautiful way of writing this?

try {  
    foo;  
}  
catch {  
   try{  
    sendEmail();  
  }  
  catch {  
   log(e.message);  
  }  
}  
+3  A: 

Java can have nested try / catch blocks.

If you'd like, you can move the try / catch sendmail block to another method. When the try / catch blocks are more complex, it will make the code easier to understand.

Gilbert Le Blanc
+13  A: 

This is the wrong approach to reporting errors.

  • If something goes badly wrong with your application there is a chance that you will SPAM the administrator with multiple emails reporting the same problem over, and over, and over ...

  • By sending emails from deep within your code, you are making it hard for the administrator to integrate your application's error reporting.

A better approach is to report the problem via a Java logging frame such as Log4J. If the administrator wants to he / she can configure some kind of monitoring system like LogWatch, Nagios, etc, etc. Such a monitoring system will detect and classify errors, anomalies, etc (like your application's errors) in the various logger streams, de-dup them, and if the administrator configures it send a notification via email, pager or whatever.

Stephen C
+1 "Logging + offline action" is truly so better
JoseK
+1, always decouple application code from site-operations monitoring (contacting admins etc.)
manuel aldana