話說asp.net有完整的例外處理機制
可以當程式設計師的防火牆
再發生很可能會出錯的地方把錯誤捕捉下來
話說asp.net有完整的例外處理機制
可以當程式設計師的防火牆
再發生很可能會出錯的地方把錯誤捕捉下來
讓程式繼續運作
但是try…catch可不是免費的
大家都知道會造成程式效能下降
所以有經驗的工程師都知道基本上該在哪些地方放try…catch
例如發mail、檔案讀寫、資料庫的處理等
但是程式畢竟是人寫的
而人又是常常會犯錯的
總不可能這樣寫吧
1: protected void Button2_Click(object sender, EventArgs e) {
2: try {
3: .
4: ..
5: ...
6: ....
7: ............所有的code都包在裡面
8: } catch (Exception) {
9:
10: throw;
11: }
12: }
就算客戶不懂code我想也沒有人能昧著良心這樣交差吧XD
沒錯!程式難免會有錯
但是上線後也不能把錯誤訊息給客戶看
總不能把除了有包在try…catch之外的錯誤當成孤兒就遺棄了
我的構想是寫在Page_Error中,但是Page_Error提供的參數不包含Exception物件Orz
後來上網查到可以用Server.GetLastError().GetBaseException()來取得Exception
剛好可以解決這個問題
看code吧
1: protected void Page_Error(object sender, EventArgs e) {
2: string ErrString = string.Empty;
3: Exception objErr = Server.GetLastError().GetBaseException();
4: ErrString += DateTime.Now.ToString() + "<br/>";
5: ErrString += "<b>Error Caught in Page_Error event</b><hr><br>" +
6: "<br><b>Error in: </b>" + Request.Url.ToString() +
7: "<br><b>Error Message: </b>" + objErr.Message.ToString() +
8: "<br><b>Stack Trace:</b><br>" +
9: objErr.StackTrace.ToString();
10: Server.ClearError();
11: Response.Write(ErrString);
12: }
原來HttpServerUtility有個GetLastError這個可以取得最後一個錯誤method阿
真是太方便了XD
很適合網站上線後使用,只要把Response.Write(ErrString); 改成發mail給自己就好囉