2010-10-27 151 views
1

我使用的web.config文件的屬性的customErrors呈現的自定義錯誤頁:ASP.net自定義錯誤洛

<customErrors mode="On" defaultRedirect="/errorpage.aspx"> 
    <error statusCode="404" redirect="/404Page.aspx"/> 
    <error statusCode="403" redirect="/403page.aspx"/> 
</customErrors> 

沒什麼特別的。現在我想要做的就是記錄加載這些頁面時發生的錯誤。我特別感興趣的任何例外,我真的不在乎用戶是什麼頁面時,他們有一個404.

我想捕獲異常並記錄到數據庫表。會這樣的工作:

//errorpage.aspx 
public void Page_Load(object sender,EventArgs e) 
{ 
    Exception objErr = Server.GetLastError().GetBaseException(); 
    var err = new {Url = Request.Url.ToString(), 
        Message = objErr.Message, 
        Trace = objErr.StackTrace.ToString()}; 

    db.Errors.InsertOnSubmit(err); 
    db.SubmitChanges(); 

    Server.ClearError(); 
} 

是否有任何其他信息值得捕獲,或通常捕獲的錯誤?

回答

2

我認爲有更好的方法來做到這一點:

  1. 使用ELMAH
  2. 在Global.asax Application_Error事件中運行您的代碼。

void Application_Error(object sender, EventArgs e) 
{ 
    Exception ex = Server.GetLastError().GetBaseException(); 
    EventLog.WriteEntry("Test Web", 
    "MESSAGE: " + ex.Message + 
    "\nSOURCE: " + ex.Source + 
    "\nFORM: " + Request.Form.ToString() + 
    "\nQUERYSTRING: " + Request.QueryString.ToString() + 
    "\nTARGETSITE: " + ex.TargetSite + 
    "\nSTACKTRACE: " + ex.StackTrace, 
    EventLogEntryType.Error); 
} 
0

你爲什麼不乾脆用應用服務器日誌,如果錯誤/異常是由於訪問數據的基礎是不可能有什麼發梗。這是我如何登錄一些網站上的錯誤:

public static void WriteException(Exception exception) 
{ 
    EventLog eventLog = null; 
    try 
    { 
     StringBuilder message = new StringBuilder(); 
     message.Append("[").Append(exception.Source).Append(" - ").Append(exception.GetType().FullName); 
     message.Append("]").Append(@"\r\n").Append(exception.ToString());    

     eventLog = new EventLog(); 
     eventLog.Log = "LOG_FILE_NAME"; 
     eventLog.Source = "APP_IDENTIFIER"; 
     eventLog.WriteEntry(message.ToString(), EventLogEntryType.Warning); 
    } 
    catch (Exception ex) {/*DO-NOTHING*/ string msg = ex.Message; } 
    finally { if (eventLog != null) { eventLog.Dispose(); } eventLog = null; } 
}