ASP.net自定义错误登录

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

    

没什么太花哨的。 现在我想要做的是记录加载任何这些页面时发生的错误。 我对任何例外都特别感兴趣,我真的不关心用户在获得404时的页面。

我想捕获exception并将其记录到db表中。 这样的事情会起作用吗:

 //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

为什么不简单地使用应用程序服务器日志 ,如果错误/exception是由于无法访问数据库而导致的。 以下是我在某些网站上记录错误的方法:

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