2011-10-26 3 views
14

私は、サイト上のすべてのクライアント側のJavaScriptエラーをキャッチしてログに記録したいと思います。これを行うためのベストプラクティスは何ですか?window.onerrorでクライアントエラーを報告するためのベストプラクティス?

思考:

  • 私は簡単に、私たちのWebアプリケーションへ/log/ハンドラを追加GET/POSTパラメータを解析し、サーバ側に当社の既存のロギングシステムを使用することができます。それはあまりにも明白ですか?
  • window.onerrorはどこでも使えますか?ハンドラでエラーが発生した場合はどうなりますか?
  • <img>タグをページに添付するか、XmlHttpRequestを作成する必要がありますか? XHRが失敗するとどうなるでしょうか?
  • 壊れた画像やjQuery Ajaxの失敗についてはどうしたらいいですか?
+0

ありがとうございました! Bountyは、ほとんどの情報をdgvidに送ります。受け入れられた答えは情報のスーパーセットでゾーランに行きます。 –

答えて

6

すべての提案は、私が追加することになり、涼しいです:

  • ノートOperaはエラーイベントがエラーのトラブルシューティングに役立つ可能性がstacktrace.jsquirksmode error event
  • 収集スタックトレースを参照してサポートしていないこと
  • かのエラーハンドラがサーバー側にエラー報告を送信できない場合は、Cookieを使用するフォールバック:errors.yourdomain.comのcookieをbase64でエンコードされたエラーレポート(圧縮?)に設定し、すべてのページのそのドメインから空の1x1ピクセルイメージを要求する
  • またはHTML5ローカルストレージを使用してアップロードしてください。
+0

実際にOperaは11.60からサポートしています(ソース:http://dev.opera.com/articles/view/better-error-handling-with-window-onerror/) – RelaXNow

+0

StackTrace.jsはhttp:// stacktracejs .com。 –

3

ログハンドラはいい考えですが、レポートの数やレポートの試行回数を制限します。たとえば、レポーターにエラーがあり、それを何度も報告しようとしないようにします。また、あなたが悪いクライアントやトラフィックのスパイクを持っていない場合は、あまりにも多くのログを記録したい。また

、window.onerrorのiframeのために動作しませんし、私はXMLHttpRequestをするだろう、あなたはすでに問題

TLを持つ場合は、DOMを台無しにしたくないん; DR;クライアント側の要求を制限し、サーバーで制限を実施します。 window.onerrorはiframeには適していませんし、xmlhttprequestを使用してください。

3

Jbecwarが示唆しているように、ログハンドラは良い考えですが、ログハンドラを呼び出してログハンドラに連絡するエラーを報告しようとする状況に注意する必要があります。ブラウザがサーバーとの接続を失った場合、そのサーバーにログを戻すことはできません。

エラーハンドラをimg要素に付加してsrc属性を設定することで、imgのロードエラーをキャッチできます。たとえば、jQueryのを使用して:

$("img#my-image").error(onImgError).prop("src", "images/my-image.jpg"); 

あなたは多くの情報そのように、指定された要素をロードしようとしたときにエラーが発生したことだけで事実を得ることはありません。

$ .ajaxに渡された設定オブジェクトにエラーコールバック関数を組み込むことで、jQuery.ajaxリクエストの失敗を処理できます。 try-catchのsuccessおよびerrorコールバック関数の両方にコードをラップするようにしてください。

一般に、エラーを捕捉してログに記録できるように、コードをtry-catchブロックで保護したいと思うでしょう。 window.onerrorを処理することは最後の手段になるはずです。

window.onerrorハンドラでは、try-catchブロック内のすべてをラップし、必要に応じてネストされたtry-catchを使用してcatchブロック内のコードからスローしないようにします。Jbecwarとdgvidによって作ら

3

Googleでは最近、処理されていないエラーをGoogleアナリティクスのページビューとして報告し始めました。基本的な考え方は、window.onerrorハンドラがエラー情報(スクリプトファイルのパス、行番号、エラーメッセージ)を仮想エラーページURLに変換してページビューとして報告することです。ロジックを任意のページトラッキングメカニズムに適用できます。

我々が使用する単純なコードは、すべてのGoogleアナリティクスの分析力、そしてこの単純な技術でhttps://github.com/shyam-habarakada/js-watson

でgithubの上で提供されています、私たちは頻繁に重大なエラーを識別するのに大成功を持っていたことができましたそれらを迅速に解決してください。また、GAの機能を使用して、全体的なエラー、特定のファイルの特定のエラーなどの傾向を分析することもできます。

関連する問題