我想在我们的网站上捕获所有客户端JavaScript错误并记录它们。这样做的最佳做法是什么?
思想:
/log/
处理程序,解析GET / POST参数并使用我们现有的服务器端日志系统。这太明显了吗?window.onerror
到处都有效吗?如果处理程序中发生错误怎么办?<img>
标记还是制作XmlHttpRequest?如果XHR失败怎么办?答案 0 :(得分:6)
Jbecwar和dgvid提出的所有建议都很酷,我想补充一下:
答案 1 :(得分:3)
日志处理程序听起来不错,但我会限制报告的数量或尝试报告。例如,您不希望报告者出错,然后尝试反复报告。此外,如果你有一个糟糕的客户或流量高峰,你不想记录太多。
另外,window.onerror对iframe不起作用,我会做xmlhttprequest,如果你已经遇到问题,你不想搞砸dom吗
TL; DR;限制客户端请求并在服务器上强制执行限制。 window.onerror对iframe不利,并使用xmlhttprequest。
答案 2 :(得分:3)
正如Jbecwar建议的那样,日志处理程序是一个好主意,但您需要注意一个条件,在该条件下,您尝试调用日志处理程序来报告与日志处理程序联系的错误。如果浏览器失去与服务器的连接,您将无法将其记录回服务器。
您可以通过将错误处理程序附加到img元素,然后设置其src属性来捕获img加载失败。例如,使用jQuery:
$("img#my-image").error(onImgError).prop("src", "images/my-image.jpg");
您不会以这种方式获得太多信息,只是在尝试加载指定元素时发生错误这一事实。
您可以通过在传递给$ .ajax的设置对象中包含错误回调函数来处理jQuery.ajax请求中的失败。一定要将代码包装在try-catch的成功和错误回调函数中。
通常,您需要使用try-catch块保护代码,以便捕获并记录错误。处理window.onerror应该是最后的手段 - 对于那些漏洞的事情。
在window.onerror处理程序中,将所有内容包装在try-catch块中,并确保不会从catch块中的代码中抛出(如果需要,使用嵌套的try-catches)。
答案 3 :(得分:3)
我们最近开始将未处理的错误报告为google-analytics的网页浏览量。基本思想是window.onerror处理程序会将错误信息(脚本文件路径,行号和错误消息)转换为虚拟错误页面URL并将其作为页面视图报告。您可以将逻辑应用于任何页面跟踪机制。
我们使用的简单代码可以在https://github.com/shyam-habarakada/js-watson
的github上找到凭借谷歌分析的所有分析能力和这种简单的技术,我们在识别频繁和严重错误方面取得了巨大成功,并且能够快速解决它们。您还可以使用GA的强大功能来分析整体错误的趋势,特定文件中的特定错误等。强烈建议。