ローカルで開発しているときは、Sentryへのエラーの送信を無効にしますが、それらのエラーをコンソールに表示して修正できるようにします。
Sentryへの例外/イベントの送信を無効にし、それでもコンソールに記録する方法はありますか?
その理由でcaptureException
をラップしました:
function captureException(...args) {
if (typeof Sentry !== 'undefined') {
Sentry.captureException(...args);
}
else {
console.error(...args);
}
}
最善のアプローチはbeforeSend
使用することだと思います
`` `js
Sentry.init({
dsn:「DSN」、
beforeSend:イベント=> {
if(IS_DEBUG){
console.error(event);
nullを返します。 //これによりイベントがドロップされ、歩哨には何も送信されません
}
リターンイベント;
}
});
beforeSend
を使用するのが気に入らないのは、元のエラーオブジェクトを取得できないことです。 しかし、返事をありがとう。
@gaastonsrあなたは2番目の引数として行います:) https://docs.sentry.io/learn/filtering/?platform=browser#before -send
Sentry.init({
dsn: "DSN",
beforeSend: (event, hint) => {
if (IS_DEBUG) {
console.error(hint.originalException || hint.syntheticException);
return null; // this drops the event and nothing will be sent to sentry
}
return event;
}
});
ああ、これはすべてを変える! ありがとう、@ kamilogorek。
コンソールがエラーをログに記録しなかった理由を見つけるのに30分かかりました。 これは簡単なはずです。
ここでの問題は、デフォルトでログに記録すると、デフォルトでブレッドクラムとしてもキャプチャされることです。 そして、キャプチャエラーに対してはすでにこれを行っています。 したがって、重複するエントリが作成されます。
私の耳はフィードバックのために完全に開かれていますが、誰かがこのドキュメントの部分を改善する方法を知っているなら、私はそれを含めてうれしいです:)
ここでの問題は、デフォルトでログに記録すると、デフォルトでブレッドクラムとしてもキャプチャされることです。 そして、キャプチャエラーに対してはすでにこれを行っています。 したがって、重複するエントリが作成されます。
私の耳はフィードバックのために完全に開かれていますが、誰かがこのドキュメントの部分を改善する方法を知っているなら、私はそれを含めてうれしいです:)
歩哨がエラーをキャッチしてコンソールに表示しないのは、本当に予期しない動作です。
また、コンソールがクリアなのにアプリが機能しない理由を1時間かけて発見しました。
これは間違いなく変更する必要があります。
サーバー側のブレッドクラムからエラーを除外できると思います。
または、 setTimeout
コールバックでコンソールに記録すると、ブレッドクラムはすでにキャプチャされます。 私が現在しているように:
Sentry.init({
dsn: 'DSN',
beforeSend: (event, hint) => {
setTimeout(() => console.error(hint.originalException || hint.syntheticException), 0);
return event;
}
});
@vitalets 5.9.0
変更されました。 コンソールにもエラーが表示されます。
@vitalets
5.9.0
変更されました。 コンソールにもエラーが表示されます。
@kamilogorek
sentry/browser 5.9.1
(chrome 78、osx)では機能しません。
コードは次のとおりです。
Sentry.init({ dsn: 'dsn' });
setTimeout(() => {throw new Error('abc')}, 3000);
コンソールは空です。 [ネットワーク]タブには、エラーが歩哨に送信されたことが示されています。
歩哨エラーなしで表示されます:
// Sentry.init({ dsn: 'dsn' });
setTimeout(() => {throw new Error('abc')}, 3000);
キャプチャイベントではなく、captureExceptionをログに記録します。
CaptureEventとcaptureExceptionをログに記録するために、 @ kamilogorekのソリューションを少し変更し
Sentry.init({
dsn: "DSN",
beforeSend: (event, hint) => {
if (IS_DEBUG) {
console.error(hint.originalException || hint.syntheticException || event);
return null; // this drops the event and nothing will be sent to sentry
}
return event;
}
});
@kamilogorekは@sentry/node
パッケージのデフォルトでもありますか? 5.9.0
バージョンがあり、 beforeSend
関数が呼び出されているのがわかりますが、コンソールに何も記録されていません。
5.10.1のコンソールでもエラーは表示されません。 debugがtrueに設定されている場合は、ロギングで十分です。
これは、仕様を最後まで読まないとどうなるかです...
https://html.spec.whatwg.org/multipage/webappapis.html#the -event-handler-processing-algorithm
特別なエラーイベント処理がtrueの場合
戻り値がtrueの場合、イベントのキャンセルフラグを設定します。
さもないと
戻り値がfalseの場合は、イベントのキャンセルフラグを設定します。
そして、あなたはスクロールします...
歴史的な理由から、プラットフォームには2つの例外があります。
グローバルオブジェクトのonerrorハンドラー。trueを返すとイベントがキャンセルされます
それに応じてコードを更新します
これはあなたがスペックを読まないときに起こることです
誰も最後までスペックを読みません:)
修正していただきありがとうございます!
このスレッドを正しく読んでいる場合、歩哨の現在のリリースでは、歩哨ダッシュボードにエラーを送信している間、コンソールにエラーが表示されるはずです。 私はこの振る舞いを経験していません。
歩哨を自分のページにロードする方法は次のとおりです。
<script src="https://browser.sentry-cdn.com/5.20.1/bundle.min.js" integrity="sha384-O8HdAJg1h8RARFowXd2J/r5fIWuinSBtjhwQoPesfVILeXzGpJxvyY/77OaPPXUo" crossorigin="anonymous"></script>
<script src="https://browser.sentry-cdn.com/5.20.1/vue.min.js" crossorigin="anonymous"></script>
これが私の初期化呼び出しです:
Sentry.init({
dsn: 'https://_________.ingest.sentry.io/___________',
integrations: [new Sentry.Integrations.Vue({Vue, attachProps: true})],
});
次のエラー生成行を追加しました。
window.undef.undef += 1;
ページを読み込んでエラー行をトリガーすると、コンソールには何も表示されませんが、歩哨ダッシュボードにエラーが表示されます。 Sentry.init
呼び出しをコメントアウトすると、jsコンソールにTypeError
れます。
このスレッドを読んだことに基づいて、歩哨ダッシュボードにログを記録しているときにjsコンソールにエラーが表示されると予想しました。 それは正しくありませんか? それでもbeforeSend
フックを使用する必要がありますか?
logErrors: true
をIntegrations.Vue
呼び出しに渡す必要があることに気付きました。
new Sentry.Integrations.Vue({Vue, attachProps: true, logErrors: true}
申し訳ありませんが、ドキュメントをもっと詳しく読む必要があります。
最も参考になるコメント
@gaastonsrあなたは2番目の引数として行います:) https://docs.sentry.io/learn/filtering/?platform=browser#before -send