我最近在我正在制作的网站上设立了Elmah。实际的日志记录和elmah视图页面适用于我的本地服务器和实时服务器。 Elmah电子邮件发送正在我的本地工作,但不在实时服务器上。我做了一些环顾四周,找不到任何解决这个问题的方法,但我找到了一个帖子,其中有人建议在Global.asax中添加一些代码,让elmah事件记录到文件中进行尝试和调试。根据该建议,我创建了一个global.asax文件(该网站之前没有),并添加了以下代码:
protected void ErrorMail_Mailing(object sender, ErrorMailEventArgs e)
{
string tos = (e.Mail.To.Count != 0) ? string.Join(",", e.Mail.To.ToList().Select(x => x.ToString()).ToArray()) : string.Empty;
string msg = string.Format("Sending mail to {0}. ", tos);
string filename = HostingEnvironment.MapPath("~/UploadedFiles/0/ElmahMailLog.txt");
StreamWriter file = File.AppendText(filename);
file.WriteLine(msg);
file.Close();
}
protected void ErrorMail_Mailed(object sender, ErrorMailEventArgs e)
{
string tos = (e.Mail.To.Count != 0) ? string.Join(",", e.Mail.To.ToList().Select(x => x.ToString()).ToArray()) : string.Empty;
string msg = string.Format("Sent mail to {0}. ", tos);
string filename = HostingEnvironment.MapPath("~/UploadedFiles/0/ElmahMailLog.txt");
StreamWriter file = File.AppendText(filename);
file.WriteLine(msg);
file.Close();
}
protected void Session_Start(object sender, EventArgs e)
{
string msg = "Session started";
string filename = HostingEnvironment.MapPath("~/UploadedFiles/0/ElmahMailLog.txt");
StreamWriter file = File.AppendText(filename);
file.WriteLine(msg);
file.Close();
}
protected void Application_Error(object sender, EventArgs e)
{
string msg = "An error occured";
string filename = HostingEnvironment.MapPath("~/UploadedFiles/0/ElmahMailLog.txt");
StreamWriter file = File.AppendText(filename);
file.WriteLine(msg);
file.Close();
}
然后我去了一个不存在的页面来生成404错误,我的本地机器上的文本文件导致了这个:
Session started
An error occured
Sending mail to myemail@someplace.com.
Sent mail to myemail@someplace.com.
此外,当我从本地计算机触发时收到错误电子邮件。当我将此代码移动到演示站点(在实时网络服务器上)时,虽然日志文件为空并且电子邮件未被发送。但错误确实记录在Elmah数据库中。
我唯一能想到的是IIS设置一定不正确。任何人都可以想到一个设置会阻止elmah发送电子邮件(但不是我的应用程序的其他部分)和/或会阻止写入文件吗?仅供参考,该网站确实有文件上传工作正常。
我真的不知道会导致这些问题的原因。任何答案或调试的想法将不胜感激。如果您需要澄清任何事情,请告诉我。
编辑:看起来我的Global.asax文件根本就没有做任何事情。就像事件没有被某些原因调用一样。甚至是asp.net事件。答案 0 :(得分:0)
您是否在本地和生产环境中使用不同的web.config文件?我经常发现,如果我的本地工作但我的生活没有,那么我的配置有问题。如果实际站点成功发送非ELMAH电子邮件,那么我建议它是实时web.config中的ELMAH配置。
如果您使用的是IIS6,请检查是否已将相关密钥添加到配置部分。
此外,如果您在实时服务器上运行IIS7,则需要将ELMAH密钥添加到web.config文件的system.webServer / modules部分。