MVC自定义错误日志异常处理
MVC添加错误日志处理模块很简单,只要写个继承自HandleErrorAttribute的过滤器,重新OnException方法,贴个异常处理代码如下:
public class ExceptionAttribute : HandleErrorAttribute { private static Logger logger = new Logger(typeof(ExceptionAttribute)); public override void OnException(ExceptionContext filterContext) { if (!filterContext.ExceptionHandled) { string controllerName = (string)filterContext.RouteData.Values["controller"]; string actionName = (string)filterContext.RouteData.Values["action"]; string msgTemplate = "在执行 controller[{0}] 的 action[{1}] 时产生异常"; Exception ex = filterContext.Exception; logger.Error(msgTemplate, ex); } if (filterContext.Result is JsonResult) { //当结果为json时,设置异常已处理 filterContext.ExceptionHandled = true; } else { var routingData = filterContext.RequestContext.RouteData; var area = routingData.DataTokens["area"]; if (area != null && area.ToString() == "Admin") { filterContext.Result = new RedirectResult("/Admin/Error/Error");//后台管理错误页面 } else { filterContext.Result = new RedirectResult("/Error/Error");//前端错误页面 前端移动端 所有要后后台错误页区分 } filterContext.ExceptionHandled = true; ////否则调用原始设置 //base.OnException(filterContext); } } }
使用的是log4net记录日志,然后在全局过滤器里注册一下就可以了(App_Start文件夹下的FilterConfig),注册代码如下:
public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { //将自己定义的异常过滤器注册为全局过滤器。(全局过滤器是可以注册多个的) filters.Add(new ExceptionAttribute()); filters.Add(new HandleErrorAttribute()); } }
OK 搞定日志模块 简单吧