Отправка электронного письма, когда выброшено исключение - PullRequest
5 голосов
/ 30 мая 2010

Я написал класс java, в котором, если метод выдает исключение, электронное письмо отправляется по почте java с отчетом администраторам.

Это работает - мой вопрос - элегантность w.r.t - чтобы поймать исключение, сгенерированное методом main, метод sendEmail () находится в блоке catch метода main. Метод sendEmail () имеет свой собственный блок try-catch.

По сути - похоже, что ниже - есть ли более красивый способ написать это?

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

Ответы [ 2 ]

20 голосов
/ 30 мая 2010

Если вы хотите что-то «более элегантное», одним простым предложением является использование вспомогательного метода sendEmail для перехвата и регистрации исключений электронной почты. (Я не думаю, что вы хотите, чтобы исключения распространялись ... или делали какое-то другое восстановление ...)


Однако есть что-то более важное , чтобы сказать. Здесь вы реализуете неправильный подход к сообщению об ошибках.

  • Если что-то идет не так с вашим приложением, есть вероятность, что вы будете СПАМИТЬ администраторам несколько писем, сообщающих об одной и той же проблеме снова и снова, и снова ...

  • Отправляя электронные письма изнутри вашего кода, вы затрудняете администратору интеграцию отчетов об ошибках вашего приложения.

Лучший подход - сообщить о проблеме с помощью фрейма регистрации Java, такого как Log4J. Если администратор хочет, он / она может настроить какую-либо систему мониторинга, такую ​​как LogWatch, Nagios и т. Д. И т. Д. Такая система мониторинга будет обнаруживать и классифицировать ошибки, аномалии и т. Д. (Например, ошибки вашего приложения) в различных потоках логгера. -добавьте их и если администратор настроит их отправьте уведомление по электронной почте, на пейджер или что-то еще.

3 голосов
/ 30 мая 2010

Java может иметь вложенные блоки try / catch.

Если хотите, вы можете переместить блок sendmail try / catch в другой метод. Когда блоки try / catch станут более сложными, это облегчит понимание кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...