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();
}
是否有任何其他信息值得捕获,或通常捕获的错误?
答
我认为有更好的方法来做到这一点:
- 使用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
答
你为什么不干脆用应用服务器日志,如果错误/异常是由于访问数据的基础是不可能有什么发梗。这是我如何登录一些网站上的错误:
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; }
}
ELMAH看起来很整齐,但在这一点上,我基本上都在* A *的解决方案只是感兴趣,直到我有时间的*权*解决方案。 – Shawn 2010-10-27 18:43:50