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

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

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

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

Но недавно я обнаружил, что для этой цели в .Net framework есть целое пространство имен: System.Web.Management, и его можно настроить в healthMonitoring в файле web.config.

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


person Costo    schedule 15.08.2008    source источник
comment
Я также видел System.Web.Management, но никогда им не пользовался. Я хотел бы услышать любые отзывы о том, хорошо ли это работает.   -  person Ben Mills    schedule 05.12.2008


Ответы (8)


Я использую elmah. У него есть несколько действительно полезных функций, и вот статья CodeProject о нем. Я думаю, что команда StackOverflow также использует elmah!

person Dale Ragan    schedule 15.08.2008
comment
В прошлом году я написал учебник по ELMAH, в котором этот сценарий описан более подробно, чем в Статья CodeProject. - person ThomasArdal; 27.09.2014

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

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

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

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

person Mun    schedule 15.08.2008

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

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

person Brian Childress    schedule 15.08.2008
comment
Около года назад мне пришлось использовать ведение журнала MS Enterprise Library для проекта. Это было очень запутанно, и я не могу вспомнить точных деталей, но в нем отсутствовала некоторая минимальная функциональность, которую можно было бы ожидать от решения для ведения журнала. Существует надстройка для Visual Studio, которая является единственным способом правильной настройки web.config. Этот инструмент переформатирует ваш файл web.config и удалит из него все комментарии :( - person TechSavvySam; 08.09.2017

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

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

person Aaron Powell    schedule 23.01.2009

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

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

person Brandon Wood    schedule 15.08.2008

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

person Community    schedule 15.09.2008

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

person matt-dot-net    schedule 09.08.2015

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

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

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, является метод внедрения кода, такой как AOP с PostSharp. Это позволяет вводить пользовательский код в начале и в конце каждого метода или при каждом исключении. Это интересный подход, но я считаю, что он может иметь большие накладные расходы на производительность.

person brendan    schedule 15.08.2008