如何实现ASP.NET Web应用程序的自动错误/崩溃报告?

时间:2009-01-31 23:09:09

标签: asp.net jquery asp.net-mvc

每个人都可能注意到,现在大多数现代应用程序都有一种方式让用户自动或经过用户许可发送崩溃/错误报告。一些示例是Mozilla Crash Reporter或大多数Microsoft应用程序。

我非常喜欢这个功能,因为它允许我使用有用的信息快速收集错误报告,而不仅仅是让我的用户报告传统的错误/问题,例如提交帮助券。

我想知道在ASP.NET Web应用程序中是否有一种简单或系统的方法来实现该功能。

你们有没有经验或知识可以分享WebForms和MVC应用程序?或者,如果这可以在客户端实现,如JavaScript / JQuery,那就很好。

谢谢!

5 个答案:

答案 0 :(得分:7)

ASP.NET 2.0引入了Health监控,它允许您通过向web.config添加一些内容来实现此目的。请参阅:http://msdn.microsoft.com/en-us/library/ms998306.aspx

它可以记录到mail,sql,eventlog等,并允许您设置缓冲区。因此,例如,如果sql数据库出现故障,或者如果某个用户发现了一个错误并且试图在一秒钟内过于频繁地调用它,它将不会终止你的邮件服务器: - )

您还可以使用它来记录失败的身份验证和应用程序池重新启动,如果您只是需要快速工作,这非常有用。如果它是管理所有错误的最佳解决方案,那仍然是个问题。因为它可能无法获得您需要的所有信息,例如浏览器版本或类似的smt。

答案 1 :(得分:4)

ELMAH是一个插入并检测异常的库。您也可以自己记录活动。事件和大量数据(如url参数和浏览器信息)可以通过电子邮件发送给管理员,也可以存储在数据库中以供显示。 (而不是网站的事件日志。)它没有我见过的内置用户表单,但可以扩展为包含这样的选项。

我已经使用/定制它大约两年了,这真的很特别。

另一种选择可能是使用Kampyle,其中包含您网站右下方的反馈框。如果在网站上检测到问题,您可以使用Javascript触发显示框。

答案 2 :(得分:1)

对于ASP.NET应用程序 - 或任何Web应用程序 - 这不仅仅是一个两步过程:

  1. 记录错误(显然);和
  2. 在错误文档上放置一个表单,以允许用户输入反馈。
  3. 或者还有更多内容吗?

答案 3 :(得分:1)

您的错误将通过 Global.asax.cs 文件(您可能必须创建)的Application_Error方法传递。我使用这个事实来捕获错误并将其记录到数据库中:

void Application_Error(object sender, EventArgs e)
{
    try
    {
        SqlConnection errConnection = new SqlConnection("Your connection string");

        // After setting up a command object, I call a stored procedure to save information about
        // the crash.  I pass two primary arguments.  The first is the URL:
        errCommand.Parameters.Add("@URL", SqlDbType.VarChar).Value = Request.Url.ToString();

        // The second is the error information.
        errCommand.Parameters.Add("@EI", SqlDbType.Text).Value = Server.GetLastError().ToString();

        // I pass some other information from my session as well...

       // After setting up an output parameter called ErrorID, I call the command...
       errCommand.ExecuteNonQuery();
       // Now Error ID is stored in the session.
       Session["ErrorID"] = (int)ErrorID.Value;
    }
    catch { } //  I do NOT want the error handling call to throw an error.
}

现在,您应该设置Web.Config文件,以便在发生错误时控制特定页面。在此页面中,您将检查会话中的错误ID并将其显示给用户。在输出中,我要求用户写下错误,如果他们想打电话给我们获取更多信息。如果我们收到请求,我可以进入数据库并获得错误的完整描述。

答案 4 :(得分:1)

您可以查看我的教程,了解如何在asp.net中实现异常日志记录 - http://jesal.us/blog/index.php/2008/04/08/exception-logging-using-the-database/