すべてのJavaScriptエラーをキャッチしてサーバーに送信する


232

JavaScriptエラーをグローバルに処理した経験があり、それをクライアントのブラウザーからサーバーに送信する経験があるかどうか疑問に思いました。

私のポイントはかなり明確だと思います。クライアント側で発生するすべての例外、エラー、コンパイルエラーなどを知り、それらをサーバーに送信して報告したいと思います。

私は主にMooToolsとhead.js(JS側の)とサーバー側のDjangoを使用しています。


20
なぜこの質問が不明確なのかわかりません。
Michael Hilus、2015

3
質問を再開するために2回投票しましたが、運がありませんでした。なぜこの質問が不明確なものとして閉じられているのかは完全に不明確です。
ムハンマドウスマン

7
@ andrew-barber-非常に多くのユーザーがこの質問を賛成するのに十分関連性があると思う場合、問題があなたに不明である場合はおそらく?
isapir

5
この質問は明確であるだけでなく、過小評価されています:)
Teoman shipahi

回答:


16

私は最近、Sentryを本番環境でテストしましたが、正常に動作します(JSおよびPHPのような他の言語)

1-オープンソースです(独自のサーバーにインストールできます)2-無料プランを使用できます(100レポート/日)

または、サーバーにインストールします:github.com/getsentry


教育機関向けの無制限の無料プランがあることに注意してください
christianvuerings 2013

8
もうオープンソースではないようです、すべてのオプションが支払われていますか?
David Cumps 2013

4
彼らはまだ無料サービス(試用版)を提供していますが、あなただけのバグの歴史の7日間を取得したり、あなたはそのオープンソース(以降ウル自身のサーバーにインストールすることができます@DavidCumps github.com/getsentry
タレク

1
GoogleタグマネージャーにはJavascriptエラーリスナーがあり、特にGAを既に使用している場合はチェックする価値があるかもしれません
Adrian Gunawan

これについてはTrackJSもチェックアウトする必要があります。これは有料サービスですが、ユーザーがデバッグのためにエラー状況に陥った方法に関する多くのコンテキストを提供します。私は開発者の一人であり、それに伴う
Todd Gardner

318

window.onerrorをチェックアウトします

例:

window.onerror = function(message, url, lineNumber) {  
  //save error and send to server for example.
  return true;
};  

trueを返すとデフォルトハンドラーが起動されなくなり、falseを返すとデフォルトハンドラーが実行されることに注意してください。


9
他のものが実行される前に、できればwindow.onerrorを割り当てます。したがって、どこに配置したい場合でも、他のjsコード/ファイルの前に実行するようにしてください。
Mike Lewis

17
注意:Mozillaは次のことを推奨しています: '一部または多くのエラーイベントはwindow.onerrorをトリガーしないことに注意してください。具体的にはそれらをリッスンする必要があります。'
Adam Naylor、2012年

88
ええ、私はそれがいくらか/多くの、非常に記述的であると言う方法が大好きです-Mozillaに感謝します。
Daniel Mendel

5
:MozillaはGlobalEventHandlers.onerror公開しdeveloper.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/...
ROLAND

1
window.onerrorを処理するコード自体がエラーをスローするとどうなりますか。無限ループの可能性はありますか?
マーティンブラウン

15

ウェブサイトでGoogle Analyticsを使用している場合は、私ができることを実行できます。

window.onerror = function(message, source, lineno, colno, error) {
  if (error) message = error.stack;
  ga('send', 'event', 'window.onerror', message, navigator.userAgent);
}

上記のコードに関するいくつかのコメント:

  • 最新のブラウザでは、完全なスタックトレースがログに記録されます。
  • スタックトレースをキャプチャしない古いブラウザでは、代わりにエラーメッセージがログに記録されます。(私の経験では、ほとんどの場合以前のiOSバージョン)。
  • ユーザーのブラウザーのバージョンもログに記録されるので、どのOS /ブラウザーのバージョンがどのエラーをスローしているかを確認できます。これにより、バグの優先順位付けとテストが簡素化されます。
  • このコードは、次のように「analytics.js」でGoogleアナリティクスを使用する場合に機能します。このように代わりに「gtag.js」を使用している場合は、関数の最後の行を微調整する必要があります。詳細はこちらをご覧ください

コードを配置したら、次のようにしてユーザーのJavascriptエラーを表示します。

  1. Googleアナリティクスで、BehaviorセクションをクリックしてからTop Eventsレポートをクリックします。
  2. イベントカテゴリのリストが表示されます。window.onerrorリストをクリックします。
  3. JavaScriptスタックトレースとエラーメッセージのリストが表示されます。Secondary dimensionボタンをクリックして表示Event Labelされるテキストボックスに入力することにより、ユーザーのOS /ブラウザバージョンのレポートに列を追加します。
  4. レポートは以下のスクリーンショットのようになります。
  5. OS /ブラウザの文字列をより人間が読める形式の説明に翻訳するには、それらをhttps://developers.whatismybrowser.com/useragents/parse/にコピーアンドペーストします

ここに画像の説明を入力してください


3
これはすべてのエラーをトラップするのではなく、try-catchブロックをトラップするだけですが、説明するのはすばらしいことであり、あなたが反対票を投じる価値はないと私は思います。
Nick Steele

ニック、ありがとう!私の回答を、ウェブサイトでうまく機能し、try ... catchでトラップしたエラーだけでなく、すべてのエラーをキャプチャーする、テスト済みのコードで更新しました。
Martin Omander 2018

2

代わりにサードパーティのサービスを使用しないでください。

エラーハンドラーは、以下のシナリオをキャッチできます。

  1. 捕捉されなかったTypeErrorはキャプチャできません
  2. キャッチされないReferenceErrorはキャプチャできません。例:var.click()
  3. TypeErrorをキャプチャできる
  4. 構文エラーをキャプチャできます
  5. ReferenceErrorをキャプチャできる

JavaScriptエラーをキャッチするには:

window.addEventListener('error', function (e) {
  //It Will handle JS errors 
})

AngularJSエラーをキャプチャするには:

app.config(function ($provide) {
$provide.decorator('$exceptionHandler', function ($delegate) {
   return function (exception, cause) {
       //It will handle AngualarJS errors
      }
   })
})

0

また、http://jslogger.comサービスはそれを助けることができます:

Javascriptエラーとイベントをクラウドに記録する

http://jslogger.com/featuresから:

これからは、サイトのユーザーエクスペリエンスを損なうすべてのエラーをスパイすることができます。すべてのJavascriptエラーは検出され、後でデバッグするために提供されます。

免責事項:サービス/会社と提携していません。


1
503サービスを利用できません
Rax

0

あなたはアタトゥスを試すことができますこれは、最新のWebアプリ用のリアルユーザーモニタリング(RUM)とともに新しいJavaScriptエラー追跡サービスです。

エラーだけでなく、エラーをトリガーしたユーザーイベントもキャプチャします。これにより、エラーを再現するための手順が提供されます。

エラーのキャプチャに加えて、ページの読み込み時間をキャプチャし、地域、ブラウザ、ページのドリルダウン、ページヒストグラム、Ajaxモニタリング、トランザクションモニタリングなど、さまざまな観点から表示します。

https://www.atatus.com/

利用可能なドキュメント:https : //www.atatus.com/docs

免責事項:私はAtatusのWeb開発者です。


1
私はAtausを統合し、foo.bar = ''のようなものを試しましたが、例外が発生しました。しかし、Atatusダッシュボードには何も表示されません。
vmachacek 2017年

メールを送って頂けませんか?
Fizer Khan、2017

5
恥知らずなプラグ。広告は右側に限定する必要があります。
ウィル


-2

この新しいサービスhttp://rescuejs.com/をチェックしてみてください。https://bugsnag.com/

サーバー側のコードを自分で書くことなく、すべてのJavaScriptエラーを記録できます。また、ブラウザのバージョンなども追跡します。

100%「エンタープライズ対応」だとは思いませんが、チェックする価値はあります。


8
シャットダウンされました。今すぐサインアップしようとすると、「関心をお寄せいただきありがとうございます。残念ながらRescue.jsは現在積極的に取り組んでいません。」というメッセージが表示されます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.