这就是我所做的,并且由于电子邮件问题,我仍然有一个错误。
我从来没有在数据库上保留任何东西,因为如果数据库有错误我不会在数据库原因上出现这种错误,从逻辑上讲,插入将失败!
因此,我通过电子邮件发送给像[email protected]
主题一个特殊的电子邮件地址:[应用程序名称] [时间戳:DDMMYYYY HHMMSS] 消息:应用程序,错误消息,堆栈跟踪信息加上会话变量,如用户名和服务器变量,如推荐人。
ASP.NET开发人员的最好的朋友是的堆栈跟踪信息,正是在这里,你会知道哪里出了问题,什么是呼叫,它被调用。
您在本系统有唯一的问题,是你不会得到任何东西,如果电子邮件有问题(一些例外,在发送电子邮件时),为此,我开始添加到每月的XML文件[ errorLog_mmm_yyyy.xml],并使用gridview加载了一个简单的“拖放”页面,该页面加载了我想要检查错误的月份和年份的XML。
try
{
// production code
}
catch(Exception ex)
{
Utilities.Mail.SendError(ex);
}
或最好的办法:将它添加到的Application_Error在Global.asax中:与代码
<%@ Application Language="C#" %>
<%@ Import Namespace="System.Diagnostics" %>
<script language="C#" runat="server">
void Application_Error(object sender, EventArgs e)
{
//get reference to the source of the exception chain
Exception ex = Server.GetLastError().GetBaseException();
//log the details of the exception and page state to the
//Windows Event Log
EventLog.WriteEntry("myWebApplication name",
"MESSAGE: " + ex.Message +
"\nSOURCE: " + ex.Source +
"\nFORM: " + Request.Form.ToString() +
"\nQUERYSTRING: " + Request.QueryString.ToString() +
"\nTARGETSITE: " + ex.TargetSite +
"\nSTACKTRACE: " + ex.StackTrace,
EventLogEntryType.Error);
Utilities.Mail.SendError(ex);
}
</script>
上面添加错误到事件日志,我追加了错误的SendError(Exception)函数中的XML文件。
保存所有数据库的问题是,如果错误是在数据库本身,您永远不会在日常报告中得到错误,导致系统无法插入它! :-) – balexandre 2008-10-25 19:27:02