有没有办法让开发人员机器看到asp.net错误?

时间:2009-10-28 17:29:13

标签: asp.net iis

我们的网站未向用户显示例外情况。但是必须在本地服务器上查看错误对我们来说真的很糟糕。

问题是:

如何让开发者机器查看生产中的错误

编辑:我可以通过改变Web.config文件来做到这一点吗?你们出现了一些有趣的想法,但我现在无法改变应用程序。

8 个答案:

答案 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中启用和禁用该解决方案,我相信这是您最好的解决方案。