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

MAD*_*Map 93 javascript error-handling logging

我运行一个ASP.NET站点,我有问题,只需手动测试就可以找到一些JavaScript错误.

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

Jon*_*nan 67

您可以尝试为onerror事件设置自己的处理程序,并使用XMLHttpRequest告诉服务器出了什么问题,但是因为它不是任何规范的一部分,所以支持有点不稳定.

以下是使用XMLHttpRequest记录JavaScript错误的示例:

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);
};
Run Code Online (Sandbox Code Playgroud)

  • 如果它在处理程序中崩溃,它会无限循环吗? (2认同)
  • @ Jean-PhilippeLeclerc是的。更糟糕的是,如果您陷入错误循环,它将对您的服务器终结点进行DoS。您应该为此添加一个限制功能,以防止客户端攻击服务器的速度过快。这是来自{Track:js} https://github.com/TrackJs/Tech-Demo/blob/master/src/TrackJs.Demo/Content/js/transmission.js的示例 (2认同)

Zty*_*tyx 26

简短回答:是的,有可能.

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

我不能说任何这些服务,因为我还没有尝试过.

  • [jsnlog.com](http://jsnlog.com/) 是免费且[开源](https://github.com/mperdeck/jsnlog)。 (2认同)

Kar*_*arl 12

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

我使用window.onerrorjQuery事件处理程序和onready函数的组合和包含错误处理函数(请参阅:JavaScript错误跟踪:为什么window.onerror不够).

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

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

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

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