Sentry-javascript: 例外( `captureException`)をコンソールにも記録する方法

作成日 2018年09月30日  ·  17コメント  ·  ソース: getsentry/sentry-javascript

ローカルで開発しているときは、Sentryへのエラーの送信を無効にしますが、それらのエラーをコンソールに表示して修正できるようにします。

Sentryへの例外/イベントの送信を無効にし、それでもコンソールに記録する方法はありますか?

最も参考になるコメント

@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;
  }
});

全てのコメント17件

その理由で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);

image

キャプチャイベントではなく、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: trueIntegrations.Vue呼び出しに渡す必要があることに気付きました。

new Sentry.Integrations.Vue({Vue, attachProps: true, logErrors: true}

申し訳ありませんが、ドキュメントをもっと詳しく読む必要があります。

このページは役に立ちましたか?
0 / 5 - 0 評価