異常可以通過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,這個就不需要發送了