我正在检查我们的旧系统,并且有一种方法可以在发生异常时发送电子邮件。
看起来像这样:
string strError = "Error in: " + Request.Path +
"\nUrl: " + Request.RawUrl + "\n\n";
// Get the exception object for the last error message that occured.
Exception ErrorInfo = Server.GetLastError().GetBaseException();
strError += "Error Message: " + ErrorInfo.Message +
"\nError Source: " + ErrorInfo.Source +
"\nError Target Site: " + ErrorInfo.TargetSite +
"\n\nQueryString Data:\n-----------------\n";
// Gathering QueryString information
for (int i = 0; i < Context.Request.QueryString.Count; i++)
strError += Context.Request.QueryString.Keys[i] + ":\t\t" + Context.Request.QueryString[i] + "\n";
strError += "\nPost Data:\n----------\n";
// Gathering Post Data information
for (int i = 0; i < Context.Request.Form.Count; i++)
strError += Context.Request.Form.Keys[i] + ":\t\t" + Context.Request.Form[i] + "\n";
strError += "\n";
if (User.Identity.IsAuthenticated) strError += "User:\t\t" + User.Identity.Name + "\n\n";
strError += "Exception Stack Trace:\n----------------------\n" + Server.GetLastError().StackTrace +
"\n\nServer Variables:\n-----------------\n";
// Gathering Server Variables information
for (int i = 0; i < Context.Request.ServerVariables.Count; i++)
strError += Context.Request.ServerVariables.Keys[i] + ":\t\t" + Context.Request.ServerVariables[i] + "\n";
strError += "\n";
// Sending error message to administration via e-mail
SmtpClient smtp = new SmtpClient();
MailMessage email = new MailMessage();
email.From = new MailAddress("noreply@mysite.com");
email.To.Add("me@mysite.com");
email.Subject = "Site error notification";
email.Body = strError;
smtp.Send(email);
这可能是或者可能不是很可怕,我们系统中的一些代码是令人震惊的,但我从未试图调查报告错误的最佳方法。你觉得怎么样?
答案 0 :(得分:2)
您可以尝试elmah
答案 1 :(得分:2)
看起来很多网站都做了 - 这并不罕见。
有些会记录到文件系统或事件日志(有时会记录到许多不同的来源)。
这实际上取决于错误的数量,谁在看它们以及需要多少信息。
有第三方图书馆对此有所帮助,elmah是一个,Logging Application Block是另一个。
答案 2 :(得分:0)
使用电子邮件报告错误的问题在于电子邮件本身并不十分可靠。
写入Windows错误日志要好得多。然后可能有一个服务,可以查看日志和电子邮件偶尔的报告,或类似的东西。