捕获所有JavaScript错误并将其发送到服务器

时间:2011-03-16 16:09:15

标签: javascript error-handling client-side

我想知道是否有人有全局处理JavaScript错误的经验,并将它们从客户端浏览器发送到服务器。

我认为我的观点很清楚,我想知道客户端发生的每个异常,错误,编译错误等,并将它们发送到服务器进行报告。

我主要使用MooTools和head.js(对于JS方面)和Django用于服务器端。

8 个答案:

答案 0 :(得分:305)

我会查看window.onerror

示例:

window.onerror = function(message, url, lineNumber) {  
  //save error and send to server for example.
  return true;
};  

请记住,返回true将阻止触发默认处理程序,返回false将使默认处理程序运行。

答案 1 :(得分:17)

我最近在生产中测试了Sentry,它运行良好(JS和PHP等其他语言)

1-它是开源的(您可以将它安装在您自己的服务器上) 2-您可以使用免费计划(每天100份报告)

或者将其安装在您的服务器上:github.com/getsentry

答案 2 :(得分:9)

如果您的网站使用Google Analytics,您可以按我的方式执行操作:

window.onerror = function(message, source, lineno, colno, error) {
  if (error) message = error.stack;
  ga('send', 'event', 'window.onerror', message, navigator.userAgent);
}

对上述代码的一些评论:

  • 对于现代浏览器,会记录完整的堆栈跟踪。
  • 对于不捕获堆栈跟踪的旧版浏览器,会记录错误消息。 (根据我的经验,大多数早期的iOS版本)。
  • 还会记录用户的浏览器版本,因此您可以查看哪些操作系统/浏览器版本正在抛出哪些错误。这简化了错误优先级和测试。
  • 如果您将Google Analytics与" analytics.js",like this一起使用,则此代码有效。如果你正在使用" gtag.js"相反,like this,你需要调整函数的最后一行。 See here for details

代码到位后,您就可以通过以下方式查看用户' Javascript错误:

  1. 在Google Analytics中,点击Behavior部分,然后点击Top Events报告。
  2. 您将获得一个事件类别列表。点击列表中的window.onerror
  3. 您将看到Javascript堆栈跟踪和错误消息的列表。为您的用户在报告中添加一列'操作系统/浏览器版本,点击Secondary dimension按钮,然后在显示的文本框中输入Event Label
  4. 报告将如下图所示。
  5. 要将操作系统/浏览器字符串翻译为更易于理解的描述,我将其复制粘贴到https://developers.whatismybrowser.com/useragents/parse/
  6. enter image description here

答案 3 :(得分:1)

此外,http://jslogger.com服务可以提供帮助:

  

在云中记录Javascript错误和事件

来自http://jslogger.com/features

  

从现在开始,您可以监视破坏网站用户体验的所有错误。每个Javascript错误都会被捕获并提交给您以便稍后进行调试。

免责声明:不隶属于该服务/公司。

答案 4 :(得分:1)

您可以尝试Atatus - 这是一个新的JavaScript错误跟踪服务以及现代网络应用的真实用户监控(RUM)。

我们不仅捕获错误,还捕获触发错误的用户事件。这为您提供了在最后重现错误的步骤。

除了错误捕获之外,我们还捕获页面加载时间并在不同的视角显示它 - 地理位置,浏览器,页面向下钻取,页面直方图,Ajax监控和事务监控。

  

https://www.atatus.com/

     

可用文档:https://www.atatus.com/docs

免责声明:我是Atatus的网络开发人员。

答案 5 :(得分:1)

uncaught库是一种很好的自由方式,可以捕获所有JS错误,包括未处理的拒绝。

答案 6 :(得分:0)

不要尝试使用第三方服务,而要自己尝试。

错误处理程序可以捕获以下情况,

  1. 无法捕获未捕获的TypeError
  2. 无法捕获未捕获的ReferenceError,例如:var.click()
  3. 可以捕获TypeError
  4. 可以捕获语法错误
  5. 可以捕获ReferenceError

要捕获Javascript错误:

window.addEventListener('error', function (e) {
  //It Will handle JS errors 
})

要捕获AngularJS错误:

app.config(function ($provide) {
$provide.decorator('$exceptionHandler', function ($delegate) {
   return function (exception, cause) {
       //It will handle AngualarJS errors
      }
   })
})

答案 7 :(得分:-1)

您可能想查看这项新服务, http://rescuejs.com/ https://bugsnag.com/

让您自己记录所有的javascript错误,而无需自己编写服务器端代码。它还跟踪浏览器版本等。

我不确定我会认为他们100%“企业准备好了”,但绝对值得一试。