ASP.NET MVC:모든 예외 처리를 일괄 관리하기

ASP.NET MVC:모든 예외 처리를 일괄 관리하기

Log All Asp.Net MVC Errors

ASP.NET MVC의 필터 기능을 사용해서 웹 어플이케이션 내의 모든 예외를 한 곳에서 처리 하도록 설정합니다.

App_Start/FilterConfig.cs

using log4net;

public class FilterConfig
{
	public static void RegisterGlobalFilters(GlobalFilterCollection filters, ILog logger)
	{
		filters.Add(new HandleErrorAttribute());
		filters.Add(new ExceptionLoggingFilter(logger));
	}
}

ExceptionLoggingFilter.cs

public class ExceptionLoggingFilter : IExceptionFilter
{
	private readonly ILog _logger;

	public ExceptionLoggingFilter(ILog logger)
	{
		_logger = logger;
	}

	public virtual void OnException(ExceptionContext filterContext)
	{
		_logger.Error(filterContext.Exception);
	}

	public interface IExceptionFilter
	{
		void OnException(ExceptionContext filterContext);
	}
}

Global.asax.cs

protected void Application_Start()
{
	XmlConfigurator.Configure();
	ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

	AreaRegistration.RegisterAllAreas();
	FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters, logger);

	// other registration
}

추가

에러 발생후에 표시하는 화면을 설정(Global.asax.cs)

protected void Application_Error(object sender, EventArgs e)
{
	Exception ex = Server.GetLastError();
	
	if (ex is HttpException)
	{
		// 404에러
	}
	else if (ex is InvalidOperationException)
	{
		// 부적절한 호출시
	}
}

Pie's Tech Note

생계형 개발자의 메모장

comments powered by Disqus

    rss facebook twitter github youtube mail spotify instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora