1

我正在使用 web.config 文件的 customErrors 属性来显示自定义错误页面:

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

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

4

3 回答 3

2

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

  1. 使用ELMAH
  2. 在 Global.asaxApplication_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);
}
于 2010-10-27T18:32:45.937 回答
0

您是否考虑过使用 Elmah 之类的东西,而不是自己动手,它可以为您处理这一切:

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

于 2010-10-27T18:30:02.430 回答
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; }
}
于 2010-10-27T19:44:33.200 回答