Как запретить отправку предупреждений об исключениях

Допустим, у вас есть система .NET, которой необходимо отправлять уведомления по электронной почте системному администратору при возникновении ошибки. Пример:

try
{
    //do something mission critical 
}
catch(Exception ex)
{
    //send ex to the system administrator
    //give the customer a user-friendly explanation
} 

Этот блок кода вызывается разными пользователями сотни раз в секунду.

Теперь допустим, что базовый API / служба / база данных не работают. Этот код будет давать сбои много-много раз . Бедный администратор проснется с несколькими миллионами электронных писем в своем почтовом ящике, а разработчик получит грубый телефонный звонок, не то чтобы такой инцидент (кашель) обязательно произошел сегодня утром.

Совершенно ясно, что это не тот дизайн, который хорошо масштабируется.

Первые несколько решений, которые приходят на ум, в некотором роде ошибочны:

  • Записывать ошибки в базу данных, затем выставьте большое количество ошибок с помощью проверки работоспособности HTTP для внешней службы мониторинга, такой как Pingdom . (Пока что мой любимый кандидат. Но что, если база данных выйдет из строя?)
  • Имейте статический кеш, который отслеживает недавние исключения, а система предупреждений всегда сначала проверяет наличие дубликатов. (Кажется излишне сложным, и, во-вторых, многие сообщения об ошибках отличаются очень незначительно - например, если в ошибке есть отметка времени, это бесполезно.)
  • Программно отключите нашу систему после определенных ошибок или на основе постоянного мониторинга критических зависимости (Рискованно! Что делать, если есть временное ложное срабатывание?)
  • Просто не предупреждайте об этих ошибках и полагайтесь на другую часть системы, которая будет отслеживать и сообщать о зависимостях. (Не обслуживает «неожиданные» ошибки, которых мы не имеем » не ожидалось.)

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

7
задан realworldcoder 29 October 2010 в 12:18
поделиться