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

IT技术 javascript logging error-handling
2021-02-07 14:38:22

我正在运行一个 ASP.NET 站点,在那里我无法通过手动测试找到一些 JavaScript 错误。

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

6个回答

您可以尝试为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);
};
我刚刚在thecodepage.com/post/JavaScript-Error-Notifications.aspx 上发布了一个服务器控件,可帮助您执行此操作
2021-03-23 14:38:22
您还可以加密一个令牌,其中包括用户 ID、IP、一个小的随机字符串(如果您的加密算法快速但薄弱,则可以阻止已知明文攻击)和一个时间戳,并将其作为 JS 变量包含在页面中。然后可以将其与错误报告一起提交并在允许将其附加到日志之前进行检查。这有助于证明可能的错误消息的真实性并防止愚蠢的 DoS 攻击,但仍然不会像节流那样保护您免受更复杂的 DoS 尝试的影响。
2021-04-03 14:38:22
@Jean-PhilippeLeclerc 是的。更糟糕的是,如果您陷入错误循环,它将 DoS 您的服务器端点。您应该为此添加一个限制功能,以防止客户端过快地访问服务器。这是 {Track:js} github.com/TrackJs/Tech-Demo/blob/master/src/TrackJs.Demo/...
2021-04-04 14:38:22
如果它在处理程序中崩溃,它会无限循环吗?
2021-04-06 14:38:22
这件事可能会使您的服务器不堪重负,例如,如果您在setInterval方法中遇到错误网络上有许多 JS 错误报告服务可用。结帐ErrLytics它还为您提供网站上每个用户操作的分析。
2021-04-14 14:38:22

简短回答:是的,这是可能的。

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

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

在 muscula.com 注册。服务看起来非常有趣并且易于集成和使用。还有 JavaScript 库github.com/csnover/TraceKit允许从客户端获取异常信息,但您必须开发自己的服务器端登录机制。我想知道是否可以使用 Google Analytics(分析)
2021-03-15 14:38:22
trackjs.com也是如此,它会跟踪用户和网络在错误发生之前所做的事情。
2021-03-19 14:38:22
2021-03-29 14:38:22
jsnlog.com是免费和开源的
2021-04-03 14:38:22
除了上面的列表还有, log4sure.com它是免费的,也有日志的实时监控。您还可以创建自定义日志表
2021-04-14 14:38:22

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

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

  • window.onerror: 捕获 IE 中的所有错误(以及 Firefox 中的大多数错误),但在 Safari 和 Opera 中不执行任何操作。
  • jQuery 事件处理程序:在所有浏览器中捕获 jQuery 事件错误。
  • jQuery 就绪功能:捕获所有浏览器中的初始化错误。

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

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

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

有机会提供此代码吗?
2021-03-19 14:38:22
我已经尝试过了,但是将 jquery 保持在依赖关系中是一种痛苦,并且 window.onerror 对于通过 cdns 提供的缩小代码和 javascript 很糟糕
2021-03-19 14:38:22
就在这里,伙计们:webcache.googleusercontent.com/...
2021-03-21 14:38:22
不幸的是不是 :( 因为我不再为我创建该代码的公司工作。但它只有大约 100 行代码,并且应该很容易从上面的细节重新创建。
2021-03-24 14:38:22

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

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

希望能帮助到你。

该链接不再起作用。您可以在developer.google.com/analytics/devguides/collection/ 上找到有关使用 Google Analytics 记录 Javascript 错误的文章...
2021-03-24 14:38:22

另外我推荐使用TraceTool实用程序,它带有 JavaScript 支持,对于 JS 监控非常方便。

TraceTool已死?
2021-03-31 14:38:22