我们的网站未向用户显示例外情况。但是必须在本地服务器上查看错误对我们来说真的很糟糕。
问题是:
如何让开发者机器查看生产中的错误?
编辑:我可以通过改变Web.config文件来做到这一点吗?你们出现了一些有趣的想法,但我现在无法改变应用程序。答案 0 :(得分:4)
查看Elmah,http://code.google.com/p/elmah/
我认为堆栈溢出的人也会使用它。
答案 1 :(得分:2)
尝试将其放入Global.asax
void Application_Error(Object sender, EventArgs E)
{
// Code that runs when an unhandled error occurs
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
System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();
mail.To.Add(new System.Net.Mail.MailAddress("youremailadrress"));
mail.From = new System.Net.Mail.MailAddress("youremailadrress");
mail.Subject = "SDI Error";
mail.Body = strError;
System.Net.Mime.ContentType("text/plain"));
System.Net.Mime.ContentType("text/html"));
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("YourSMTPServer");
smtp.Send(mail);
}
答案 2 :(得分:1)
如果异常不包含敏感信息,您可以考虑将其作为评论写入“友好”错误页面。这样它就不会显示在页面上,但是开发人员可以查看源并查看信息。
答案 3 :(得分:1)
没有办法显示某些机器(本地除外)的错误,而不是其他所有机器。您应该使用global.asax中的全局应用程序错误事件来记录异常。
protected void Application_Error(object sender, EventArgs e)
{
System.Exception ex = Server.GetLastError();
//TODO: Log Exception
}
答案 4 :(得分:1)
我们使用全局异常错误事件将错误记录到Db表中,并将完整的错误状态列表通过电子邮件发送给完整的开发团队。电子邮件中的信息包括:
请求信息 调用堆栈 用户/客户信息 完成会话转储 完全转储饼干 完全转储应用程序变量
将此作为电子邮件发送给所有开发人员还有一个额外的好处,即可以清除所有问题,并在出现重大问题时立即显现 - 您的电子邮箱开始填满。
答案 5 :(得分:0)
这取决于您如何告诉Web服务器显示自定义错误页面。如果你是通过web.config(system.web customErrors元素)进行的,那么你可以让你的开发盒使用与生产不同的web.config。
答案 6 :(得分:0)
您可以使用visual studio 2008的远程调试工具。点击此处了解更多信息:http://msdn.microsoft.com/en-us/library/bt727f1t.aspx
答案 7 :(得分:0)
您可以在web.config中打开跟踪,然后打开http://your-server/trace.axd以查看有关对服务器的请求的报告,包括抛出的异常。
有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/1y89ed7z(VS.71).aspx。
简而言之,您将以下内容添加到您的web.config。
<configuration>
<system.web>
<trace enabled="true" requestLimit="100" localOnly="false"/>
</system.web>
</configuration>
由于您需要一个作为框架一部分的解决方案,并且您可以在web.config中启用和禁用该解决方案,我相信这是您最好的解决方案。