8

我已经使用 实现了客户端异常日志记录window.onerror,我在其中检索当前错误和堆栈跟踪,并使用 AJAX 将其发送到服务器

    window.onerror = function(message, url, line) {

      var stackTrace = printStackTrace(); //get stack trace

      //send message, url, line and stackTrace to the server using an ajax call
    }

printStackTrace这个库提供的函数在哪里:http: //stacktracejs.com/

问题在于,在生产中所有 JavaScript 文件都被缩小,因此堆栈跟踪和行号并没有真正有用,因为所有错误都在文件的第 1 行报告,这是正常的,因为缩小版本包含一行代码。例如:

Message: Object doesn't support property or method 'indexOf' 
URL: http://[server]/[site]/content/combined/combined.635EE367354E6DF721593CAC56FECF95.min.js
Line: 1

可以使用源映射来改进这一点,还是仅在开发者工具处于活动状态时才有效?

当没有激活​​开发人员工具/启用源映射的用户发生错误时,我想要的是使用源映射(或至少是实际行号)获取完整的堆栈跟踪。这可能吗?

4

1 回答 1

4

您绝对可以获取源映射中包含的所有信息并自行设计堆栈跟踪,但 AFAIK 还没有一个优雅的解决方案。无论哪种方式,它都需要至少 ajaxing 映射文件,并且可能是原始源文件。而且您将遇到一些棘手的跨浏览器问题,因为并非所有浏览器都完全支持源映射。

看起来堆栈跟踪在他们的计划中有这个,但还没有任何人在上面执行: https ://github.com/eriwen/javascript-stacktrace/issues/44

Get Sentry 确实将其作为其 js 日志记录实用程序的一部分,但它包含在一个更多功能的工具中,我相信它目前仅支持 Chrome 中的完整堆栈跟踪日志记录: https ://github.com/getsentry/raven- js

于 2013-10-31T00:06:25.503 回答