今天我发现需要跟踪和检索Javascript错误堆栈以解决它们。
今天我们能够捕获所有的rest调用,这样一来,一旦出错,自动发布该错误的堆栈跟踪加上rest保存服务的响应,这样我们就可以在几乎相同的环境/情况下检测、复制和解决问题。
作为一个要求,我们被要求制作一个可以包含而不具侵入性的模块,例如:将包含钩子逻辑的模块包含在一个JS中,将不具侵入性,在各种JS文件中包含几行代码将具有侵入性。
目标是制作一个可以包含在已经开发的系统中并跟踪错误事件(如console)的工具。
我阅读了关于这些追踪器逻辑的文章:
- errorception.com/
- trackjs.com/
- atatus.com/
- airbrake.io/
- jslogger.com/
- getsentry.com/
- muscula.com/
- debuggify.net/
- raygun.io/home
我们需要做类似的事情,跟踪错误并将其发送到我们的服务器。
正如“Dagg Nabbit”所说...“目前很难从‘野外’错误中获取堆栈跟踪”...
所以,我们有很多付费产品,但它们真的是如何运作的呢?
在Airbrake中,他们使用堆栈跟踪和window.onerror:
window.onerror = function(message, file, line) {
setTimeout(function() {
Hoptoad.notify({
message : message,
stack : '()@' + file + ':' + line
});
}, 100);
return true;
};
但我无法确定堆栈跟踪何时真正被使用。
在某些情况下,堆栈跟踪、raven.js和其他跟踪器需要尝试/捕获。
- 如果我们找到一种方法来创建全局包装器会发生什么?
- 我们可以只调用堆栈跟踪并等待捕获吗?
当客户端出现意外错误时,如何将堆栈跟踪发送到我的服务器?有什么建议或良好实践?
try ... catch
,并评估它们或将它们放入脚本标签中。这将带来一系列其他问题,比如遇到同源策略,并使堆栈跟踪中的文件名无用。另一个选择可能是设置一个服务器端脚本加载器代理,执行相同的操作;这可能会非常有效。 - Dagg Nabbit{domain}/jsproxy/{scheme}/{url}
这样的 URL,例如yourserver.com/jsproxy/http/code.jquery.com/jquery.js
。你可以像这个 PHP 示例 一样抓取文件并提供服务,或者你可以将它们缓存到磁盘或内存中,并检查远程资源的更改而不是每次都获取它们。 - Dagg Nabbit