Стратегия обработки исключений и ведения журнала in.NET
Я создаю многослойное приложение, которое имеет ASP.NET веб-приложение MVC. Он состоит из таких узуалов, как уровень презентации, бизнес-уровень, уровень данных и т. д. Как можно создать / использовать приличный механизм обработки исключений? Я читал о паттернах и практиках, которые вам нужны, чтобы всплывать исключения из различных слоев.
Также ведение журнала. Где происходит ведение журнала? В веб-приложении MVC?
Как бы вы перенаправили на различные страницы ошибок в зависимости от тип ошибки?
Я был бы признателен за некоторые отзывы об этом, и некоторые статьи, если у вас, ребята, есть некоторые. Если есть какие-либо примеры приложений, которые используют достойную стратегию исключения hadling и ведения журнала, пожалуйста, дайте мне знать :)
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