Вопрос по exception, asp.net, exception-handling – Обработка исключений в ASP.NET / ведение журнала

6

Существует ли простой способ регистрации всех исключений в приложении ASP.NET? Я уже регистрирую необработанные исключения с помощью события Application_OnError, но я хочу выполнить регистрацию, даже когда исключение обрабатывается на уровне страницы.

Большое спасибо.

Вы имеете в виду обработанный, поймав это, или используя Page_Error, или что-то еще? Пожалуйста, будьте более конкретны. RichardOD
Обращается, поймав это. staterium

Ваш Ответ

7   ответов
5

Предполагая, что вы только выбрасываете и перехватываете свои собственные типы исключений (производные от System.Exception ofc), вы можете сделать свой журнал базовых исключений любым необходимым в его конструкторе.

это хорошая идея
В реальном приложении вы не можете ловить только свои собственные типы исключений. Что вы можете сделать, так это поймать их в верхних слоях (т.е. в пользовательском интерфейсе). Это потребовало бы от вас обернуть каждое пойманное исключение в свой собственный тип исключения на нижних уровнях и перебросить их. Однако это все еще не охватывает все сценарии.
Это маловероятно, так как стандартные исключения .Net выдают много исключений - отбрасывать их как свои собственные было бы очень расточительно
@ck - Вы имеете в виду исключения, создаваемые, например, серверными элементами управления, то есть в раскрывающемся списке задан недопустимый индекс selectedindex? staterium
Хммм, интересный угол. Я должен был бы предоставить свой собственный базовый тип исключения, а затем в любом случае изменить каждый оператор catch для него, но тогда, по крайней мере, все мои функции ведения журналов находятся в одном месте. staterium
3

Я согласен с Коллином, что вы должны регистрироваться везде, где вы ловите (и не выбрасывать).

Но если вам нужно, чтобы каждое исключение регистрировалось без особых изменений кода, обработайтеСобытие AppDomain.FirstChanceExceptionи вы получите ВСЕ исключения (возможно, это даже слишком много: p, но это может помочь вам очистить код).

0

что в любом случае есть автоматическая регистрация обработанных исключений. Если вы уже ведете журналирование Application_OnError для необработанных исключений, я боюсь, что Колин исправлен, и вам придется вызывать компонент журналирования в блоках catch для обработанных исключений, для которых вы хотите регистрировать.

0
Хотя это может теоретически ответить на вопрос,it would be preferable включить основные части ответа здесь и предоставить ссылку для справки.
1

ASP.NET Health Monitoring делает это элегантным и довольно автоматическим способом (не нужно вручную перехватывать исключения):

ASP.NET Health Monitoring Overview How To: Use Health Monitoring in ASP.NET 2.0

Когда вы нажимаете первую ссылку, появляется пример того, как включить и настроить мониторинг работоспособности ASP.NET. Вам необходимо настроить его в файле web.config.

Для входа в БД вы можете создать соответствующую таблицу, используя инструмент регистрации ASP.NET SQL Server:ASP.NET SQL Server инструмент регистрации (Aspnet_regsql.exe)

Мне это и вправду нравится. Для ручной регистрации,шаблоны & amp; практикует блок приложения ведения журнала Enterprise Library может быть что-то для вас, но это немного не по теме.

Матиас

9

Вы могли бы использоватьElmah регистрировать ваши исключения. Он действительно прост в использовании и дает хорошую информацию о проблеме.

+20 За рекомендацию Эльмы. Это стало стандартом при разработке ИМХО. Если я вспоминаю, SO тоже использует это.
& quot; вы получаете следующие возможности, не меняя ни одной строки кода: * Регистрация почти всех необработанных исключений. & Quot; staterium
1

Вызовите ваш компонент журналирования в блоках catch для обработки исключений.

Я работаю с ошибками ради пользователя, но мне нужно больше информации для целей отладки, чем то, что отображается пользователю. staterium
Ну да. Но мне интересно, нет ли более легкого способа сделать это? Без изменения каждого оператора catch по отдельности? staterium
Почему у вас есть операторы catch, если вы не обрабатываете ошибку? Если вы обрабатываете ошибку, тогда нет необходимости засорять ваш журнал этим ?!

Похожие вопросы