在生产中捕获JavaScript错误的最佳方法?

rst*_*rim 21 javascript debugging frontend

我有一个严重的JavaScript问题,很难在任何dev/test/prod环境中重现.尽管如此,我们的客户仍在不断报道.有时我们认为它是特定于浏览器的 - 有时我们认为它是特定于行动的 - 有时我们认为它与cookie有关.这是一个艰难的一个,我们被拉到太多不同的方向,他们都很短.

我们认为问题出现在我们的一个主要JavaScript文件中 - 但该文件非常庞大.我们过去在这个文件中已经指出了其他问题 - 并且成功地防止了使用try/catch块的未来问题 - 但是,目前我们还不确定这些新问题发生在哪里.

我们搜索了我们的服务器日志,我们发现的信息没有用.

我想知道使用JavaScript日志框架是否有助于解决我们的问题.实现类似" log4javascript "的东西会捕获/记录我们用户的活动,而不仅仅是我们吗?有什么建议?还有其他人遇到过这种情况吗?您采用了哪些策略来更好地理解您的错误?

Tim*_*own 20

log4javascript的AjaxAppender可用于向服务器发送日志消息.

var log = log4javascript.getLogger("serverlog");
var ajaxAppender = new log4javascript.AjaxAppender("http://example.com/clientlogger");
log.addAppender(ajaxAppender);
Run Code Online (Sandbox Code Playgroud)

您可以在代码中放置信息日志调用,并添加一个window.onerror处理程序来捕获try/catch代码中未被块捕获的错误:

window.onerror = function(errorMsg, url, lineNumber) {
    log.fatal("Uncaught error " + errorMsg + " in " + url + ", line " + lineNumber);
};
Run Code Online (Sandbox Code Playgroud)

您还需要在服务器上创建一些东西来处理来自浏览器的日志记录请求.

完全披露:我是log4javascript的作者.

  • 我是第二个log4javascript的AjaxAppender,完成了这项工作.在此解释:http://www.adamjamesnaylor.com/2012/10/10/Logging-Clientside-JavaScript-Errors-On-The-Server.aspx (2认同)