ASP.net自定义错误洛

问题描述:

我使用的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(); 
} 

是否有任何其他信息值得捕获,或通常捕获的错误?

我认为有更好的方法来做到这一点:

  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); 
} 

而不是滚动您自己,你有没有使用类似ELMAH,它可以处理这一切都为你考虑:

http://www.hanselman.com/blog/ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo.aspx

+0

ELMAH看起来很整齐,但在这一点上,我基本上都在* A *的解决方案只是感兴趣,直到我有时间的*权*解决方案。 – Shawn 2010-10-27 18:43:50

你为什么不干脆用应用服务器日志,如果错误/异常是由于访问数据的基础是不可能有什么发梗。这是我如何登录一些网站上的错误:

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; } 
}