Yahoo!のニコラス・ザカス 名声は、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;
}
1年後、Nicholas Zakasがブログにアップデートを投稿しました。これには、(アスペクト指向プログラミングを使用して)プロダクション環境にエラー処理コードを自動的に挿入する巧妙なパターンが含まれています。
window.error呼び出しのロギングを開始すると、2つのことに気づくでしょう。
- サイトがかなり複雑な場合、多くのエラーが記録されます
- 役に立たない "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);
}
不要な「window.error in undefined:0」エラーの処理はサイトのアーキテクチャによって異なりますが、すべてのAjax呼び出しを識別して、何かが失敗した場合に例外をスローすることができます(おそらく、stacktrace.jsを使用してスタックトレースを返します)。