2017-03-07 18 views
0

ログに記録するために、Javascriptの例外(処理されていないものと処理されていないもの)をすべて送信しようとしています。私はwindow.onerror documentationalso this postを介してこの問題を明らかにしましたが、処理されない例外に対してのみ最適です。処理された(処理されていない)Javascriptエラーをサーバーに送信

window.onerrorブロックがcatch()ブロックですでに処理されている場合は、ブロックされません。

私のコードのcatch()ブロックに私のlogToServer()機能を手作業で添付するのが「痛い」方法ですが、それはもっとうまくいっています。

私は以下の少しスニペットを設定しました。

var logToServer = function logToServer() { 
 
    console.info('logToServer() called'); 
 
}; 
 
window.onerror = function(z, x, c, v, b) { 
 
    console.info(z); 
 
    console.info(x); 
 
    console.info(c); 
 
    console.info(v); 
 
    console.info(b); 
 

 
    // call a function to send to server 
 
    logToServer(); 
 
}; 
 
window.addEventListener('error', function(z, x, c, v, b) { 
 
    console.info(z); 
 

 
    // call a function to send to server 
 
    logToServer(); 
 
}); 
 

 
// test w/o catch-block 
 
//console.info(err); // calls logToServer() 
 

 
// test w/ catch-block 
 
try { 
 
    console.info(asd); // does not call logToServer() 
 
} catch (err) { 
 
    console.error(err); 
 
};
Enable logs in console.

+0

処理される例外については、ロジックを実行し、最後にcatchブロックから例外をスローします。 –

+0

なぜですか?あなたが避けることのできないエラーに対処するために* try ... catch *を使うか、これらのエラーは*(そしてそのようなエラーが発生する場所が多いはずがありません)*です。あるいは、あなたは*いたずら/バグのコードを扱うためにどこでも* try .. catch *を使って、ユーザがこれらのエラーやその結果を見るのを避けます。この場合、これらのエラーをキャッチして、そのエラーを引き起こすコードを修正してください。だからもう一度、なぜあなたは手動でそのロギングを追加するのが面倒だと思うのですか?そして、なぜあなたはすでに対処されたすべてのエラーをログに記録したいのですか? – Thomas

+0

@MuhammadQasim - すべてのcatchブロックを手動で編集し、例外がスローされたときに私のロジックを呼び出すことを意味しますか?私はそれをすることができますが、すべてのキャッチブロックを訪問することは過度のようです。将来の新しいtry catchブロックが常に私のserver-logging-logic-functionを呼び出すように常に保証することはもちろんです。他に何か意味がありましたか? – Rodiwa

答えて

0

window.onerror火災唯一の例外は、未処理である場合。例外をキャッチした場合、このイベントは発生しません。すべてのtry-catchブロックで明示的に行う必要があります。 catchブロックでは、例外をスローする必要があります。構文はシンプルです:

try{ 
    //Your try logic 
} 
catch(ex){ 
    // Your catch logic comes here 
    throw ex; //This will throw exception and window.onerror will be fired. 
} 
関連する問題