8

を使用してクライアント側の例外ログを実装しwindow.onerrorました。現在のエラーとスタック トレースを取得し、AJAX を使用してサーバーに送信します。

    window.onerror = function(message, url, line) {

      var stackTrace = printStackTrace(); //get stack trace

      //send message, url, line and stackTrace to the server using an ajax call
    }

printStackTrace、このライブラリによって提供される関数です: http://stacktracejs.com/

問題は、本番環境ではすべての JavaScript ファイルが縮小されているため、スタック トレースと行番号は実際には役に立たないことです。これは、すべてのエラーがファイルの 1 行目に報告されているためです。これは、縮小されたバージョンには 1 行のコードが含まれているため正常です。例えば:

Message: Object doesn't support property or method 'indexOf' 
URL: http://[server]/[site]/content/combined/combined.635EE367354E6DF721593CAC56FECF95.min.js
Line: 1

これはソース マップを使用して改善できますか、それとも開発者ツールがアクティブな場合にのみ機能しますか?

私が望むのは、開発者ツールを有効にしていない/ソースマップを有効にしていないユーザーにエラーが発生したときに、ソースマップ (または少なくとも実際の行番号) を使用して完全なスタックトレースを取得することです。これはまったく可能ですか?

4

1 に答える 1

4

ソース マップに含まれるすべての情報を確実に取得し、自分でスタック トレースを設計できますが、これに対する洗練されたソリューションはまだありません。いずれにせよ、少なくともマップ ファイルと、おそらく生のソース ファイルを ajax する必要があります。また、すべてのブラウザがソース マップを完全にサポートしているわけではないため、ブラウザ間の問題が発生する可能性があります。

スタック トレースの計画にはこれが含まれているようですが、まだ誰も実行していません: https://github.com/eriwen/javascript-stacktrace/issues/44

Get Sentry は js ロギング ユーティリティの一部としてこれを行いますが、より多目的なツール内にラップされており、現在のところ Chrome での完全なスタック トレース ロギングのみをサポートしていると思います: https://github.com/getsentry/raven- js

于 2013-10-31T00:06:25.503 に答える