Я ищу лучший способ регистрации ошибок в приложении ASP.NET. Я хочу иметь возможность получать электронные письма, когда в моем приложении возникают ошибки, с подробной информацией об исключении и текущем запросе.
В моей компании у нас был свой собственный ErrorMailer, отлавливающий все в Global.asax Application_Error. Это было "хорошо", но не очень гибко и не настраиваемо.
Недавно мы перешли на NLog. Он гораздо более настраиваемый, мы можем определять различные цели для ошибок, фильтровать их, буферизировать (пока не пробовали). Это очень хорошее улучшение.
Но недавно я обнаружил, что в .Net есть целое пространство имен для этой цели: System.Web.Management и его можно настроить в разделе healthMonitoring в web.config.
Приходилось ли вам работать с мониторингом здоровья в .Net? Каково ваше решение для протоколирования ошибок?
Я использую elmah. У него есть несколько действительно хороших функций, и вот статья CodeProject о нем. Я думаю, что команда StackOverflow также использует elmah!
Я'вэ использовал такой как log4net, настроен по электронной почте подробности фатальных ошибок. Это's также настроить, чтобы она записывала все в файл журнала, который имеет неоценимое значение при попытке отладки проблемы. Другое преимущество заключается в том, что если стандартный функционал не'т делать, что вы хотите, это'ы довольно легко написать пользовательский приемщика, который может обрабатывать информацию в области лесозаготовок по мере необходимости.
Сказав это, я'м через это в тандеме с пользовательского обработчика ошибок, который отправляет письма в формате HTML с немного больше информации, чем входит в стандартный, такой как log4net письма - страницы, сессии переменные, файлы cookies, HTTP-сервер переменные и т. д.
Они оба проводные в Application_OnError, где исключение регистрируется как неустранимое исключение в такой как log4net (после чего он будет выслан на указанный адрес электронной почты), а также обрабатываются с помощью пользовательского обработчика ошибок.
Впервые услышал о Elmah от кодирование ужасов записи блога, аварии ответственно, и хотя это выглядит многообещающим, я'м еще, чтобы реализовать любые проекты.
Я использую log4net и где когда-либо я жду исключение я зарегистрировать ее на соответствующий уровень. Я, как правило, не повторно бросить исключение, потому что он не'т действительно позволяют как-хороший пользовательский опыт, тем меньше информации вы можете предоставить на текущее состояние.
Я'll имеет application_error для перехвата также настроен, чтобы поймать любое исключение, которое не ожидалось, и ошибка регистрируется в качестве смертельного приоритет путем, такой как log4net (ну, 404'ов, обнаруженных и зарегистрированных в качестве информации, как они'т, что высокой степени тяжести).
Я've был с помощью библиотеки Enterprise'ы объектов лесозаготовок. Это позволяет иметь различные типы лесозаготовки (плоский файл, по электронной почте, и/или базы данных). Это'ы довольно настраиваемый и имеет очень хороший интерфейс для обновления вашего веб.config для настройки ведения журнала. Обычно я называю мою регистрацию на ошибки в глобальном.эйсакс.
Мы используем EnterpriseLibrary.Обработка исключений.Лесозаготовки. Мне нравится это немного лучше, чем такой как log4net, потому что мы не только полностью контролировать ведение журнала, но мы можем контролировать бросок решение/NoThrow в config как хорошо.
Моя команда использует log4net от Apache. Он довольно легкий и простой в настройке. Лучше всего то, что он полностью настраивается из файла web.config, поэтому, как только вы установите крючки в коде, вы можете полностью изменить способ ведения журнала, просто изменив файл web.config.
log4net поддерживает запись логов в самые разные места - базу данных, электронную почту, текстовый файл, журнал событий Windows и т.д. Моя команда настроила его на отправку подробной информации об ошибках в базу данных, а также на отправку электронной почты всей команде с достаточной информацией, чтобы мы могли определить, в какой части кода возникла ошибка. Тогда мы знаем, кто отвечает за этот кусок кода, и они могут обратиться к базе данных, чтобы получить более подробную информацию.
Недавно я создал веб-сервис asp.net с NLog, который я использую для всех моих настольных приложений. Ведение журнала работ в порядке, когда я'м отладку в Visual Studio, но как только я переключаюсь на IIS лог-файл это'т создан; я'вэ еще не определил почему, но это то, что мне нужно искать решение заставляет меня хотите попробовать что-то другое для меня asp.net должен!
Мы используем написанную нами собственную утилиту протоколирования. Она требует, чтобы вы сами реализовали ведение журнала везде, где это необходимо. Но она также позволяет вам фиксировать гораздо больше, чем просто исключение.
Например, наш код выглядит следующим образом:
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. Это позволяет вам внедрять пользовательский код в начале и конце каждого метода или при каждом исключении. Это интересный подход, но я считаю, что он может иметь большие накладные расходы на производительность.