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(); }
是否有其他值得捕获的信息,或者通常是在错误中捕获?
我认为有更好的方法可以做到这一点:
- 使用ELMAH !
- 在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; } }