雅虎的尼古拉斯·扎卡斯(Nicholas Zakas)!名声在Ajax Experience 2008 上进行了有关企业错误处理的演讲(幻灯片),他提出了类似的建议:
function log(sev,msg) {
var img = new Image();
img.src = "log.php?sev=" +
encodeURIComponent(sev) +
"&msg=" + encodeURIComponent(msg);
}
// usage
log(1, "Something bad happened.")
// Auto-log uncaught JS errors
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; // only log some errors
var img = new Image();
img.src = "log.php?sev=" +
encodeURIComponent(sev) +
"&msg=" + encodeURIComponent(msg);
}
处理无用的“ undefined:0中的window.error”错误取决于您的站点体系结构,但是可以尝试识别所有Ajax调用并在出现故障时引发异常(可能使用stacktrace.js返回堆栈跟踪)。