Как вы регистрируете ошибки (исключения) в ваших приложениях ASP.NET?

StackOverflow https://stackoverflow.com/questions/11950

Вопрос

Я ищу лучший способ регистрации ошибок в приложении ASP.NET.Я хочу иметь возможность получать электронные письма при возникновении ошибок в моем приложении с подробной информацией об Исключении и текущем Запросе.

В моей компании раньше был собственный ErrorMailer, перехватывающий все, что есть в Global.asax Application_Error.Это было «ОК», но не очень гибко и не настраиваемо.

Недавно мы перешли на NLog.Это гораздо более настраиваемо: мы можем определять разные цели для ошибок, фильтровать их, буферизовать (пока не пробовали).Это очень хорошее улучшение.

Но недавно я обнаружил, что для этой цели в инфраструктуре .Net есть целое пространство имен: Система.Веб.Управление и его можно настроить в мониторинг здоровья раздел web.config.

Вы когда-нибудь работали с мониторингом работоспособности .Net?Каково ваше решение для регистрации ошибок?

Это было полезно?

Решение

я использую Эльма.У него есть несколько действительно хороших функций, и вот КодПроект статья об этом.Я думаю, что команда StackOverflow тоже использует elmah!

Другие советы

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

Сказав это, я использую это в тандеме с пользовательским обработчиком ошибок, который отправляет электронное письмо в формате HTML с немного большей информацией, чем включено в стандартные электронные письма log4net - страница, переменные сеанса, файлы cookie, переменные http-сервера и т. д.

Оба они связаны с событием Application_OnError, где исключение регистрируется как фатальное исключение в log4net (что затем приводит к его отправке по электронной почте на указанный адрес электронной почты), а также обрабатывается с помощью специального обработчика ошибок.

Впервые услышал о Эльмах из записи в блоге Coding Horror, Аварии ответственно, и хотя это выглядит многообещающе, я еще не реализовал ни одного проекта.

Я использовал объекты журналирования корпоративной библиотеки.Это позволяет вам иметь различные типы журналирования (плоский файл, электронная почта и/или база данных).Он довольно настраиваемый и имеет довольно хороший интерфейс для обновления вашего web.config для настройки ведения журнала.Обычно я вызываю журналирование из параметра «При ошибке» в файле Global.asax.

Вот ссылка на MSDN

Я использую log4net и где бы я ни был ожидать исключение я регистрирую на соответствующем уровне.Я стараюсь не выбрасывать повторно исключение, потому что на самом деле оно не обеспечивает такого же приятного взаимодействия с пользователем, и в текущем состоянии вы можете предоставить меньше информации.

Я также настрою Application_Error для перехвата любого неожиданного исключения, и ошибка будет зарегистрирована как фатальный приоритет через log4net (ну, ошибки 404 обнаруживаются и регистрируются как Info, поскольку они не имеют такой высокой серьезности).

Моя команда использует log4net от Апача.Он довольно легкий и простой в настройке.Самое приятное то, что его полностью можно настроить в файле web.config, поэтому, как только у вас появятся крючки в настройке кода, вы сможете полностью изменить способ ведения журналов, просто изменив файл web.config.

log4net поддерживает ведение журналов в самых разных местах — базе данных, электронной почте, текстовом файле, журнале событий Windows и т. д.Моя команда настроила его на отправку подробной информации об ошибках в базу данных, а также на отправку всей команде электронного письма с достаточным количеством информации, чтобы мы могли определить, в какой части кода возникла ошибка.Тогда мы узнаем, кто отвечает за этот фрагмент кода, и они смогут обратиться к базе данных для получения более подробной информации.

Недавно я создал веб-сервис asp.net с помощью NLog, который использую для всех своих настольных приложений.Ведение журнала работает нормально, когда я отлаживаю в Visual Studio, но как только я переключаюсь на IIS, файл журнала не создается;Я еще не определил почему, но тот факт, что мне нужно искать решение, заставляет меня попробовать что-то еще для моих нужд asp.net!

Мы используем EnterpriseLibrary.ExceptionHandling.Logging.Мне он нравится немного больше, чем log4net, потому что мы не только полностью контролируем ведение журнала, но и можем контролировать решение Throw/NoThrow в конфигурации.

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

Например, наш код будет выглядеть так:

Try
  Dim p as New Person()
  p.Name = "Joe"
  p.Age = 30
Catch ex as Exception
  Log.LogException(ex,"Err creating person and assigning name/age")
  Throw ex
End Try

Таким образом, наш регистратор запишет всю необходимую информацию в базу данных SQL.У нас есть оповещения по электронной почте, настроенные на уровне БД для поиска определенных или часто возникающих ошибок.Это помогает нам точно определить, откуда берутся ошибки.

Возможно, это не совсем то, что вы ищете.Другой подход, аналогичный использованию Global.asax, заключается в использовании метода внедрения кода, например АОП с ПостШарп.Это позволяет вам вставлять собственный код в начало и конец каждого метода или при каждом исключении.Это интересный подход, но я считаю, что он может привести к значительным потерям производительности.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top