参考了以下两篇文章
MVC扩展Filter,通过继承HandleErrorAttribute,使用log4net或ELMAH组件记录服务端500错误、HttpException、Ajax异常等
ASP.NET MVC中注册Global.asax的Application_Error事件处理全局异常
总体设计
错误类型 | 错误入口 | 处理方法 |
Controller中的错误 (已经考虑到的) | 在try-catch中记录日志 | 显示HttpCode500错误视图 |
Controller中的错误 (未考虑到的) | 在继承HandleErrorAttribute的类中记录日志 | 显示HttpCode500错误视图 |
url地址错误 | 在全局处理Application_Start方法中处理 | 显示HttpCode404错误视图 |
其他错误 | 在全局处理Application_Start方法中处理 | 显示其他错误视图 |
第一步:在MVC中使用Log4Net记录日志:
1. 创建log4net.config.xml文件,配置Log4Net的节点。
2. 在Global.asax文件Application_Start()方法中添加业务功能,该业务来读取Log4Net配置文件内容,从而将配置文件与我们的应用程序联系起来(Log4Net注入到我们的应用程序中)。
3. 在Common下新建一个类ErrRecorder,初始化ILog,进行日志记录。以后凡是程序中想使用日志记录时,直接在try-catch中使用这个类下的WriteError()方法。
这种方法完全是自定义记录日志,所有错误的捕捉都是自己try-catch的。
第二步:
1. 自己建一个Attribute类,继承错误异常过滤器HandleErrorAttribute。
重写方法OnException(ExceptionContext filterContext)。 filterContext就是异常上下文 在这个方法中捕获异常信息。
2. 添加到全局过滤器中,filters.Add(new HandleErrorAttribute()) 写我们自己的异常处理信息属性
3. 在Global.asax全局文件的Application_Start()方法中使用Log4Net进行日志记录(Log4Net是线程安全的)
第三步:
在Application_Start中添加Application_Error事件。这个事件是在OnException()事件执行完成之后执行的,可以用来处理Filter遗漏的事件,如没有找到网页的404错误等