ASP.NET 错误处理模块
异常可以通过try catch捕捉到,但是难免有几个忘记catch的,这样会导致页面出现500等错误,在本机还是可以看到错误信息,但如果已经上线,抛出的异常又不会让用户看到,想处理,可以去windows日志里面看,还可以加一个module,将异常信息捕捉到,并发给相关人士。
创建一个项目,添加一个类ErrorReporterModule,继承自IHttpModule,实现2个方法。void Init(HttpApplication context)和void Dispose()
在Init下加入如下代码:
1: context.Error += (object sender, EventArgs e) =>
2: {
3: HttpContext ctx = HttpContext.Current;
4: HttpRequest request = ctx.Request;
5: Exception exception = ctx.Server.GetLastError();
6:
7: HttpErrorMessage message = new HttpErrorMessage()
8: {
9: Message = exception.Message,
10: StackTrace = exception.StackTrace,
11: Source = exception.Source,
12: HelpLink = exception.HelpLink,
13: RequestForm = request.Form,
14: RequestParam = request.Params,
15: RequestUrl = request.Url.ToString(),
16: QueryString = request.QueryString,
17: Cookies = request.Cookies
18: };
19: container.Resolve<ErrorRecorder>().Record(message);
20: ctx.Server.ClearError();
21: };
剩下的就是处理这些异常了,主要的错误信息就在Exception里面,出错时的环境则在request里面。
处理抛出的异常可以用文本记录方式也可以存入数据库,但是这些处理都很被动,开发人员要不定时去查看这些信息才可以看到。当然我们也可以配置一个邮件服务,将这些错误信息主动发送到开发人员手中。
我们也可以配置相关的处理人员,这样可以根据不同的站点,发送到对应的开发、测试那里。
NEXT:配置web.config
在web.confg中加个:
<httpModules>
<add name="ErrorReporterModule" type="Symbol.Web.Mvc.Modules.ErrorReporterModule"/>
</httpModules>
就可以了,
II7的经典模式是和II6一样的,就是对IIS6的兼容。
但是在II7中的集成模式,我们还需要在system.webServer中加一次。
最后记录一下idea:
1.配置对应的模块开发人员,哪个模块出错了就那个人员去跟进
2.设置一个定时任务,如一个礼拜导出一个异常报告
3.配置多种发送模式,文本、数据库、邮件。。。
4.分辨不同的异常,像404之类的很可能是用户打错URL,这个就不需要发送了