Стратегия обработки исключений и ведения журнала in.NET



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



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



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



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

697   5  

5 ответов:

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

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

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

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

Обновление Теперь вы можете настроить elmah в своем приложении непосредственно с помощью NuGet packager. http://gregorsuttie.wordpress.com/2011/02/02/elmah-using-nuget-what-they-are-and-why-you-should-use-them-part-1/

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

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

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

Большинство платформ ведения журналов .NET имеют некоторые встроенные функциональные возможности для поддержки ASP.NET (или должен); для Serilog это Serilog.Дополнительный.Веб-пакет на NuGet . Там не так много, чтобы настроить, установка пакета в приложение Serilog вызовет ASP.NET ошибки, которые будут регистрироваться &c.

(я работаю над Serilog и только что написал пост об этом сценарии.)

Comments

    Ничего не найдено.