ASP.NET MVC:모든 예외 처리를 일괄 관리하기
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)
{
// 부적절한 호출시
}
}