2

このコードを使用して、エラーログをユーザーからデータベースに保存します

window.onerror = function (msg, url, line) {
    $.ajax({
        type: "POST",
        url: "call/savelog.php",
        data: {
            type : "bug\n" + version,
            message : 'Error message: '+msg+'\nURL: '+url+'\nLine Number: '+line
        }
    });
    return true;
};



javascriptコンソールにあった場合、jqueryまたはkineticjs関数でエラーが発生すると、このようなものが得られます

Uncaught TypeError: Cannot read property '_id' of undefined kinetic-v4.0.2.js:1386
Kinetic.Node.remove kinetic-v4.0.2.js:1386
Kinetic.Layer.remove kinetic-v4.0.2.js:3667
drawCountdown side_play.js:105

javascriptファイルside_play.jsのdrawCountdown関数によるエラーの原因がわかりますが
、エラーログには次のように表示されます

Error message: Uncaught TypeError: Cannot read property '_id' of undefined
URL: https://myurl.com/js/kinetic-v4.0.2.js
Line Number: 1386 

そのため、どの関数がエラーを引き起こしているのかわかりません。
エラーの原因となった最も深い機能まで追跡し、エラー ログをデータベースに保存する方法

4

2 に答える 2

2

window.onerror イベントを使用しているようですが、それで問題ありません。コードのどこにでも try catch を挿入することはお勧めしません。私は、JavaScript エラーをログに記録している多くの人と話しました。挿入を開始したら、catch を試してください。

  • 一部の場所を見逃すリスクが高い
  • try catch は開発者にとってエラーを隠すため、通常の開発は難しくなります。本当に必要なのは、本番環境では try catch であり、開発環境では try catch ではありません。

大規模なプロジェクトで try catch を挿入した私が話した人々は、それを本当に後悔しています。

私のプロジェクトMusculaを試すことができます。これは、javaScript ソース ファイルを取得しようとし、エラーの原因となったコード行を表示します。これで問題が解決すると思います。

また、try catch が可能な場所 (すべてではない) に自動挿入し、残りのエラーは window.onerror でキャッチされます。

Muscula を使用するには、Google アナリティクスなどのスクリプトをインストールするだけで、エラーをログに記録できます。どのように機能するかを教えてください。現在、Muscula はオープン ベータ版であり、無料で使用できます。約で使用されます。毎日 4.000.000 ページビュー。

于 2012-10-11T15:47:10.597 に答える
0

関数を try/catch ステートメントでラップできます。エラーが発生した場合は、エラーをキャッチして、たとえばサーバー経由でファイルに書き込むことができます。

try {
  yourFunctionCallHere();
} catch (err) {
   var message = 'yourFunctionCallHere failed: ' + err.message;
   //now you can do smth with this error message, for example send an ajax request to the server...
}
于 2012-10-11T06:52:23.073 に答える