2009-01-12 53 views
25

我希望在應用程序崩潰時將郵件發送給管理員。 所以我簡單地做這global.asax在ASP.NET應用程序的global.asax中處理Application_Error

void Application_error(object sender, EventArgs e) 
{ 
    SendMessageToAdministarator(Server.GetLastError().ToString()); 
} 

但實際上,很多時候Application_Error被稱爲即使應用程序不會崩潰。

我希望只在應用程序崩潰時才發送郵件給管理員。

另外,我有一個簡單的方法來解除應用程序嗎?

我正在尋找最簡單的解決方案。

回答

52

當應用程序沒有崩潰時發送什麼樣的錯誤?您可以檢查異常的類型和不發送的電子郵件例外不崩潰的應用程序(例如重定向可以丟,我手動代碼過濾ThreadAbortException):

protected void Application_Error(Object sender, EventArgs e) 
{ 
    Exception ex = Server.GetLastError(); 
    if (ex is ThreadAbortException) 
     return; 
    Logger.Error(LoggerType.Global, ex, "Exception"); 
    Response.Redirect("unexpectederror.htm"); 
} 

你可以添加重定向到錯誤頁面,其中包含發生錯誤的用戶的消息以及指向站點中相關頁面的一些鏈接。這是爲了'解除應用程序' - 我希望這是你想要的。

另外,您也可以查看log4net的日誌記錄,該日誌也可以記錄服務器上的錯誤發送錯誤郵件。

+0

非常感謝。 「手動過濾代碼」是什麼意思?同時,一個錯誤,我constanly得到的是一些 System.Web.HttpException:文件不存在。 在System.Web.StaticFileHandler.ProcessRequestInternal(HttpContext的背景下)......但是,這並不做任何明顯的傷害 – Hanan 2009-01-12 09:33:03

相關問題