如果出现未处理的错误,我想向管理员发送一封电子邮件,其中包含发生错误的信息。以下是我在web.config和Global.asax.cs文件中的内容,重定向有效但电子邮件没有:
<system.web>
<customErrors mode="On" defaultRedirect="error.aspx" />
</system.web>
void Application_Error(object sender, EventArgs e)
{
// Code that runs when an unhandled error occurs
// Get the exception object.
Exception error = Server.GetLastError();
MailMessage mail = new MailMessage();
mail.To.Add("admin@mysite.com");
mail.Subject = "Error";
mail.Body = "Somebody has experienced an error." + "<br><br>";
mail.Body += error.ToString();
mail.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.EnableSsl = true;
smtp.Credentials = new System.Net.NetworkCredential("username", "password");
smtp.Port = 587;
smtp.Send(mail);
Server.ClearError();
}
答案 0 :(得分:2)
您应该安装Elmah(您可以通过NuGet执行此操作)而不是自己滚动,并让它为您完成工作。最好的代码是你不写的代码。
Elmah是一个HttpModule,位于ASP.Net堆栈的顶部并捕获/处理未捕获的异常:
ELMAH(错误记录模块和处理程序)是一个应用程序范围的错误记录工具 这是完全可插拔的。它可以动态添加到正在运行的ASP.NET Web中 应用程序,甚至是机器上的所有ASP.NET Web应用程序,无需任何操作 重新编译或重新部署。
将ELMAH放入正在运行的Web应用程序并进行适当配置后, 您可以在不更改代码的任何一行的情况下获得以下工具:
- 记录几乎所有未处理的例外情况。
- 远程查看已重新编码的例外日志的网页。
- 用于远程查看任何一个已记录异常的完整详细信息的网页,包括 彩色堆栈痕迹。
- 在很多情况下,您可以查看ASP.NET的原始黄色死亡屏幕 即使关闭了customErrors模式,也会为给定的异常生成。
- 发生时每个错误的电子邮件通知。
- 日志中最近15个错误的RSS提要。
配置Elmah发送电子邮件(在登录之上)非常简单
如果您要编写自己的代码,请安装Log4Net并将其配置为使用1个或更多SMTP appenders以及您想要/需要/期望的任何其他日志追加程序。
答案 1 :(得分:0)
protected void Application_Error(Object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
EmailTheException( ex );
}
private void EmailTheException( Exception ex )
{
MailMessage mail = new MailMessage();
mail.To = "GroupEmail@SomeCompany.com";
mail.From = "SomeApplication@SomeCompany.com";
mail.Subject = "An Application Exception has Occurred.";
mail.Body = ex.ToString();
var smtpHost = ConfigurationManager.AppSettings["smtphost"];
var port = Convert.ToUInt32(ConfigurationManager.AppSettings["port"]);
using (SmtpClient client = new SmtpClient(smtpHost))
{
if (string.IsNullOrEmpty(smtpHost)) return;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
try
{
client.Send(mail);
}
catch (SmtpException smtpEx)
{
//write logging code here and capture smtpEx.Message
}
}
}
答案 2 :(得分:-2)
默认情况下,所有未捕获的异常都将记录到Windows事件日志中。您可以访问Control Panel
- &gt; Administrative Tools
- &gt; Event Viewer
- &gt; Windows Logs
- &gt; Application