Стратегия обработки и регистрации исключений в .NET - PullRequest
14 голосов
/ 04 марта 2011

Я создаю многоуровневое приложение с веб-приложением ASP.NET MVC.Он состоит из обычных вещей, таких как уровень представления, бизнес-уровень, уровень данных и т. Д. Как создать / использовать достойный механизм обработки исключений?Я читал в «Паттернах и практиках», что вам нужно всплывать исключения для разных слоев.

Также ведение журнала.Где происходит регистрация?В веб-приложении MVC?

Как бы вы перенаправили на разные страницы ошибок в зависимости от типа ошибки?

Буду признателен за некоторые отзывы об этом, а также за некоторые статьи, если у вас есть такие.Если есть какие-либо примеры приложений, которые используют приличную стратегию исключения и регистрации, пожалуйста, дайте мне знать:)

Ответы [ 5 ]

10 голосов
/ 04 марта 2011

Во-первых, я бы предложил прочитать статью " Vexing Exceptions " Eric Lippert . Это должно дать вам разумное руководство по обработке исключений (и больше по выбрасыванию исключений).

Когда дело доходит до регистрации исключений, самый простой и понятный подход - иметь обработчик исключений «верхнего уровня», отвечающий за обработку всех необработанных в противном случае исключений, и записывать их в журнал для анализа. Это можно сделать в приложениях ASP.NET с помощью события HttpApplication.Error, к которому можно подключиться через файл Global.asax.

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

6 голосов
/ 04 марта 2011

В моем приложении MVC3 я использую ELMAH для обработки исключений, как описано здесь Как заставить ELMAH работать с атрибутом ASP.NET MVC [HandleError]? , в то время как если мне нужно зарегистрировать собственное сообщение, яиспользуйте методы Trace, которые исходят из System.Diagnostics, здесь полезная ссылка Переопределение System.Diagnostics.Trace.WriteLine для входа в файл .

ОБНОВЛЕНИЕ Теперь вы можете настроить elmah вВаше приложение напрямую с помощью упаковщика NuGet.http://gregorsuttie.wordpress.com/2011/02/02/elmah-using-nuget-what-they-are-and-why-you-should-use-them-part-1/

2 голосов
/ 04 марта 2011

Взгляните на Enterprise Library .Он предоставит вам очень гибкий инструмент регистрации и другие товары, которые, я думаю, вам понравятся.Например: вы можете использовать блок приложения Police Injection (taht реализует AOP), чтобы перехватывать все исключения в вашем коде без написания строки кода.

1 голос
/ 22 марта 2014

Большинство каркасов ведения журналов .NET имеют некоторые встроенные функции для поддержки ASP.NET (или должны);для Serilog это пакет Serilog.Extras.Web на NuGet .Настроить не так уж и много, установка пакета в ваше приложение Serilog приведет к регистрации ошибок ASP.NET и т.*.)

1 голос
/ 04 марта 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...