在服务器上记录客户端JavaScript错误

时间:2008-09-23 06:43:12

标签: javascript logging error-handling

我正在运行一个ASP.NET站点,我只是通过手动测试找到了一些JavaScript错误。

是否有可能捕获客户端上的所有JavaScript错误并将其记录在服务器上,即在EventLog中(通过Web服务或类似的东西)?

8 个答案:

答案 0 :(得分:65)

您可以尝试为onerror event设置自己的处理程序,并使用XMLHttpRequest告诉服务器出了什么问题,但是因为它不是任何规范的一部分,support is somewhat flaky

以下是Using XMLHttpRequest to log JavaScript errors的示例:

window.onerror = function(msg, url, line)
{
  var req = new XMLHttpRequest();
  var params = "msg=" + encodeURIComponent(msg) + '&url=' + encodeURIComponent(url) + "&line=" + line;
  req.open("POST", "/scripts/logerror.php");
  req.send(params);
};

答案 1 :(得分:25)

简答:是的,有可能。

更长的答案:人们已经写过如何通过编写自己的代码来解决这个问题(至少部分地)。但请注意,有些服务似乎确保了JS代码在许多浏览器中都能正常工作。我发现了以下内容:

我不能代表任何这些服务,因为我还没有尝试过。

答案 2 :(得分:12)

我刚刚在工作中的项目上实现了javascript错误的服务器端错误记录。遗留代码和使用jQuery的新代码混合在一起。

我使用window.onerror的组合,并使用错误处理函数包装jQuery事件处理程序和onready函数(请参阅:JavaScript Error Tracking: Why window.onerror Is Not Enough)。

  • window.onerror:捕获IE中的所有错误(以及Firefox中的大多数错误),但在Safari和Opera中无效。
  • jQuery事件处理程序:捕获所有浏览器中的jQuery事件错误。
  • jQuery ready函数:捕获所有浏览器中的初始化错误。

一旦我发现错误,我会向它添加一些额外的属性(网址,浏览器等),然后使用ajax调用将其发回服务器。

在服务器上我有一个小页面,它只接受发布的参数并将它们输出到我们的普通服务器日志框架。

我想为此开源代码(作为jQuery插件)。如果有人有兴趣让我知道,那将有助于说服老板们!

答案 3 :(得分:1)

如果您使用Google Analytics,则可以将javascript错误记录到Google Analytics Events中。

查看此应用:http://siteapps.com/app/log_javascript_errors_with_ga-181

希望它有所帮助。

答案 4 :(得分:0)

您可以通过try / catch对服务器进行Ajax调用,但这可能是您可以做的最好的。

我可以建议使用JavaScript单元测试吗?可能是JSUnit

答案 5 :(得分:0)

我还建议使用TraceTool实用程序,它附带JavaScript支持,对JS监控非常方便。

答案 6 :(得分:0)

如果您想将客户端错误记录回服务器,那么您将不得不进行某种服务器处理。最好的办法是拥有一个可以通过JavaScript(AJAX)访问的Web服务,并将错误日志信息传递给它。

如果问题出在托管Web服务的网络服务器上你遇到了麻烦,那么100%是不是100%解决问题,你可以通过查询字符串通过标准页面发送信息,一种方法是通过动态生成Image标签(然后将其删除),因为浏览器将尝试加载图像源。它很好地解决了跨域JavaScript调用问题。请记住,如果某人关闭了图片,您就会遇到麻烦;)

答案 7 :(得分:0)

我最近一直在使用Appfail,它捕获了asp.net和JavaScript错误