这就是我所做的,但由于电子邮件问题,我仍然遇到了错误。
我从不在数据库上保留任何东西,因为如果数据库有错误,我将永远不会在数据库上出现该错误,从逻辑上讲,插入将失败!
所以我通过电子邮件发送到一个特殊的电子邮件地址,例如 bugs@mydomain.com
主题:[应用程序名称] [时间戳:ddmmyyyy hhmmss]
消息:应用程序、错误消息、堆栈跟踪信息以及会话变量(如用户名)和服务器变量(如引用者)。
ASP.NET 开发人员最好的朋友是堆栈跟踪信息,在这里您会知道出了什么问题、调用了什么以及调用的位置。
您在此系统中遇到的唯一问题是,如果电子邮件有问题(发送电子邮件时出现一些异常),您将不会得到任何东西,为此我开始添加到每月 XML 文件 [errorLog_ mmm_yyyy.xml] 为好吧,并制作了一个简单的“拖放”页面,其中包含一个网格视图,该页面加载了我想要检查错误的月份和年份的 XML。
try
{
// production code
}
catch(Exception ex)
{
Utilities.Mail.SendError(ex);
}
或最好的方法:将其添加到global.asax中的Application_Error中:
<%@ 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 文件中。