1. 程式人生 > >ASP.NET MVC捕獲異常

ASP.NET MVC捕獲異常

第一步:

在MVC中的Model中建立一個MyExceptionAttribute類,並繼承HandleErrorAttribute類,重寫HandleErrorAttribute類中的OnException方法(當程式出現異常時會執行OnException方法),此時OnException方法的引數filterContext封裝了錯誤日誌資訊。

第二步:

當進入到OnException方法時說明程式已經出現了異常,通過filterContext.Exception可以拿到異常物件Exception(物件名為myException),此時我們應該將異常資訊寫入日誌檔案等,再跳到錯誤頁面,在考慮到所有異常錯誤都會執行這個方法,因此這個寫入檔案的操作可能會引起併發,這裡用Lock鎖雖然能解決問題,但會帶來長時間等待的問題,所以我們在此處採用佇列的機制

第三步:

我們在MyExceptionAttribute類中新增一個型別為Queue<Exception>的靜態欄位exceptionQueue,將第二步拿到的異常加入到exceptionQueue佇列之中,然後直接跳轉到錯誤頁。

第四步:在程式的入口函式Application_Start()中開啟執行緒池物件無限迴圈的去檢查MyExceptionAttribute類中的exceptionQueue佇列,如果有資料,則取出來一條一條寫入日誌,如果沒有資料則讓當前執行緒物件休息一會(減輕CPU壓力)

第五步:把FilterConfig類中的GlobalFilterCollection物件的Add方法中的值改為new  MyExceptionAttribute

()