【问题标题】:How to implement automatic bug/crash report for ASP.NET web application?如何为 ASP.NET Web 应用程序实现自动错误/崩溃报告?
【发布时间】:2009-01-31 23:09:08
【问题描述】:

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

我真的很喜欢这个功能,因为它允许我通过有用的信息快速收集错误报告,而不仅仅是让我的用户报告错误/问题,例如提交帮助票。

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

你们有任何关于 WebForms 和 MVC 应用程序的经验或知识可以分享吗?或者如果这可以在 JavaScript/JQuery 之类的客户端中实现,那就太好了。

谢谢!

【问题讨论】:

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


【解决方案1】:

ASP.NET 2.0 引入了健康监控,它允许您通过在 web.config 中添加一些东西来做到这一点。见:http://msdn.microsoft.com/en-us/library/ms998306.aspx

它可以记录到邮件、sql、事件日志等,并允许您设置缓冲区。因此,例如,如果 sql 数据库出现故障或某些用户发现错误并尝试频繁调用它,它不会杀死您的邮件服务器:-)

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

【讨论】:

  • +1 非常有用的答案。我在下面回答了我在 ASP.NET 1.0 时代为执行此操作而构建的一些软件,但您让我认为我可能需要采取另一种方法。谢谢!
  • 感谢您的提示。您的回答使我找到了如何将运行状况监控与 MVC 一起使用的有用链接。 alexthissen.nl/blogs/main/archive/2008/07/01/…
【解决方案2】:

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

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

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

【讨论】:

  • 感谢您的回答。这些工具也可能对我的项目有所帮助。
【解决方案3】:

对于 ASP.NET 应用程序 - 或任何与此相关的 Web 应用程序 - 这不只是一个两步过程:

  1. 记录错误(显然);和
  2. 在错误文档上放置一个表单以允许用户输入反馈。

或者还有更多?

【讨论】:

  • 谢谢。确实如此。但是,我一直在寻找一个库或框架(无论是否内置),以便我可以轻松地将其与 ASP.NET 应用程序一起使用。
【解决方案4】:

您的错误将通过 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 并将其显示给用户。在输出中,如果用户想致电我们获取更多信息,我会要求用户写下错误。如果我们确实收到了请求,我可以进入数据库并获得错误的完整跟踪。

【讨论】:

    【解决方案5】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      • 2010-09-10
      相关资源
      最近更新 更多