尼古拉斯·扎卡斯在2008年Ajax Experience上做了一个关于企业级错误处理的演讲(
幻灯片),他提出了类似这样的东西:
function log(sev,msg) {
var img = new Image();
img.src = "log.php?sev=" +
encodeURIComponent(sev) +
"&msg=" + encodeURIComponent(msg);
}
log(1, "Something bad happened.")
window.onerror = function(msg, url, line) {
log(1, msg);
return true;
}
一年后,Nicholas Zakas在他的博客上发布了一篇更新,其中包括一个巧妙的模式,可以在生产环境中自动注入错误处理代码(使用面向方面的编程)。
当你开始记录 window.error 调用时,你会注意到两件事情:
- 如果您的网站相当复杂,您将记录大量的错误信息。
- 你会看到一堆无用的 "window.error in undefined:0" 消息。
减少日志条目的洪流很简单,只需在记录到服务器之前测试严重性和/或随机数即可:
function log(sev,msg) {
if (Math.random() > 0.1) return;
var img = new Image();
img.src = "log.php?sev=" +
encodeURIComponent(sev) +
"&msg=" + encodeURIComponent(msg);
}
处理无用的
window.error in undefined:0
错误取决于您的站点架构,但可以尝试识别所有 Ajax 调用,并在出现错误时抛出异常(可能使用
stacktrace.js 返回堆栈跟踪)。