2012-06-29 64 views
17

我的项目,其中包含很多页面的形式。这是银行CRM系统的后端,因此在工作过程中的任何错误都将被捕获和调查。 在服务器端,我们增强了java异常系统,但是如果客户端出现错误 - javascript我们现在得到的唯一信息是IE中的js错误窗口或者有时是高级用户制作的页面屏幕截图。错误记录在客户端的JavaScript

Javascript代码同时包含jQuery的供电UI扩展和硬编码内嵌事件处理程序和功能。

所以我询问是否可以用于捕捉任何类型的JS-错误的任何方法吗? 一些额外的库或东西,可以给我一个堆栈跟踪像Mozilla中的萤火或Chrome中的网页控制台?

+2

请参考此链接:http://openmymind.net/2012/4/4/You-Really-Should-Log-Client-Side-Error/ –

+0

感谢泰米尔和亚历山大,但在我的情况下,我可以' t使用外包,并不位于我的网络区域服务 – shershen

+0

我没有尝试过,我自己的,但像这样的解决方案,可能看起来很有趣:https://www.proxino.com/ –

回答

24

查找到window.onerror。如果你想捕获任何错误,并将它们报告给服务器,那么你可以尝试一个AJAX请求。

window.onerror = function(errorMessage, errorUrl, errorLine) { 
    jQuery.ajax({ 
     type: 'POST', 
     url: 'jserror.jsf', 
     data: { 
      msg: errorMessage, 
      url: errorUrl, 
      line: errorLine 
     }, 
     success: function() { 
      if (console && console.log) { 
       console.log('JS error report successful.'); 
      } 
     }, 
     error: function() { 
      if (console && console.error) { 
       console.error('JS error report submission failed!'); 
      } 
     } 
    }); 

    // Prevent firing of default error handler. 
    return true; 
} 
+7

你应该添加一个节流功能。如果客户端陷入产生错误的循环中,客户端将快速地DOS登录终端。看看这个Repo是一个很好的例子。 https://github.com/TrackJs/Tech-Demo –

+0

dataType:“json” – 0fnt

+0

contentType需要'application/json' – Kildareflare

2

如果你想要做无痛人流的实施只是把this家伙在你的应用程序的JavaScript代码。否则,如果你想实现一个,然后尝试this获得上windowerror堆栈跟踪,你可以使用ajax报告错误。 A nice way跟踪由olark报告的错误

2

http://exceptionhub.com 应该诀窍。 http://errorception.com/ 不提供尽可能多的调试信息,但也看起来不错。

proxino似乎不知道自己在做什么,他们在哪里他们记录器的代码登录的onerror事件我最后一次检查incuding一个完整的jQuery。我不会相信一个对客户端JavaScript有很少掌握的服务来记录我的JavaScript错误。

+1

值得指出的是,Proxino也是有一个jQuery-less版本的脚本,虽然它仍然需要你在你的页面上加载jQuery。 https://www.proxino.com/documentation –

1

我建议使用JsLog.me服务

它可以捕捉整个控制台输出除了错误和踪迹。我们在我们的项目中使用它,记录整个控制台日志可帮助我们的QA团队记录问题再现方式。此外,它适用于Chrome控制台中的大型JSON对象,并进行搜索。

12

免责声明:我是CEO和创建者Sentry,一个开源的和付费的服务,确实崩溃报告的许多语言,包括JavaScript。

捕获前端异常可能非常具有挑战性。技术已经变得更好(浏览器JS引擎),但仍然有很多限制。

  1. 您将需要一个服务器端日志记录端点。这有一些复杂性,因为它可能会滥用它(即PEN测试人员可能试图揭露它的漏洞)。你也需要在这里处理CORS。我明显推荐Sentry,因为我们在课堂上是最好的,如果你想要,你可以自己托管服务器(作为开源)。
  2. 在代码中实际捕获错误的实现非常复杂。你不能依靠window.onerror出于各种原因(主要是因为浏览器在历史上给出了不好的信息)。我们在raven.js客户端(基于TraceKit)中所做的是修补了许多函数,以将它们包装在try/catch语句中。例如,window.setTimeout。有了这个,我们可以安装错误处理程序,它将在大多数浏览器中生成完整的堆栈跟踪。
  3. 您需要确保您为代码生成源代码,并且处理数据的服务器支持它们。哨兵通过自动(通过标准)抓取它们或允许您通过API上传它们。如果没有这个,假设你正在缩小代码,事情变得几乎不可用。
  4. 最后一个主要问题是噪音。大多数浏览器扩展将直接注入到脚本中,因此您需要滤除噪音。我们通过两种方式来解决这个问题:要忽略的模式黑名单(即“脚本错误”最无用)以及要接受的域白名单(即“example.com”)。我们发现两者的结合是有效的 - 足以去除大多数随机噪声。

有些事情你应该知道的服务器上:

  • 客户有时会持续开放(即一个机器人,或者不好的用户),并导致大量的无用数据或简单的老错误。
  • 您的服务器应该能够处理这些事件的级联并优雅地失败。 Sentry通过限速和采样数据来实现这一点。
  • 异常本地化为浏览器语言,如果没有集中式数据库,您将不能自行翻译它们(尽管它通常很明显是什么意思)。
1

Atatus捕获JavaScript错误并捕获错误之前的用户操作。这将有助于更好地理解错误。 Atatus帮助你监视你的前端,不仅错误,而且它的性能(真实用户监控)

https://www.atatus.com/

免责声明:我在Atatus Web开发人员。