Sentry-javascript: [オブジェクトErrorEvent]としてログに記録されたエラーメッセージプロパティ

作成日 2017年08月07日  ·  31コメント  ·  ソース: getsentry/sentry-javascript

機能をリクエストしバグを報告しますか?
バグ。

現在の動作は何ですか?
エラーのmessageプロパティが[object ErrorEvent]としてログに記録されることがあります(常にではありません)。 https://docs.sentry.io/clients/javascript/integrations/angular/で説明されているように、AngularでのRavenの標準実装に従いました

期待される動作は何ですか?
通常のエラーメッセージを表示します。

レイヴン3.17.0
Angular 4.3.1
Webpackビルド
CLIを使用しない
CDNバージョン

objecterrorevent

Help Wanted Needs Reproduction Bug

最も参考になるコメント

問題を見つけました。 ErrorEventによってエラーとして扱われていませんisError見つけることができる機能、UTILこちら。 便宜上、関数定義も貼り付けます。

function isError(value) {
  switch ({}.toString.call(value)) {
    case '[object Error]':
      return true;
    case '[object Exception]':
      return true;
    case '[object DOMException]':
      return true;
    default:
      return value instanceof Error;
  }
}

コンソールで簡単なテストを行って、この関数がErrorEventに対してtrueを返すかどうかを確認しましたが、そうではありませんでした。

image

isErrorは、 captureExceptionメソッドで使用され、例外パラメーターがエラーであるか、単にメッセージであるかを判別します。 captureExceptionは、例外が_実際に_エラーではないと判断した場合、 captureMessageを使用してダッシュボードに例外を送信します。 この場合、Ravenはスタックトレースを計算したり、例外を「処理」したりしません。 そのまま送り出します。

ErrorEventオブジェクトに対してtrueを返すようにisErrorを更新すべきでない理由はありますか?

全てのコメント31件

AngularドキュメントのどこかにErrorEvent定義がありますか? どうやらこれは正しい方法でErrorを「継承」していません。

問題はTraceKitのtraceKitWindowOnError()メソッドにある可能性があり、 message引数がErrorEvent可能性があることを考慮していないようです( MDNドキュメントを参照)

@benvinegar ErrorEventいくつかのドキュメントがあります: https//developer.mozilla.org/en-US/docs/Web/API/ErrorEvent

これによっても影響を受け、これらのユーザーも影響を受けます。
https://forum.sentry.io/t/reporting-object-errorevent/1807

[email protected] (ただし、古いバージョンでもしばらくの間発生しています)
Angular 4.x
CLIの使用

ここでもIonic3

<script>
  undefined.foo();
</script>

^これはあなたのhtmlで[object ErrorEvent]として歩哨を介してサファリにログインしています。 正しいメッセージはTypeError: undefined is not an object (evaluating 'undefined.foo')

iframeを作成しようとするscriptタグを介してコードを挿入する外部スクリプトがありますが、それはsafariによってブロックされています。 エラーは挿入されたスクリプトタグに起因するため、歩哨は[object ErrorEvent]報告するだけです

[object Event]として報告された歩哨からの別のエラーは、flowplayerからのものです。 フロープレーヤーは

jQueryElement.trigger('error', [api, {code: 5}]);

jQueryを埋め込むことでそれを再現でき、次のようにします。

$('div:first').trigger('error')

セントリーはこのようなものを見ています
image

確かに非常に直列化可能ではないthatsのが、のようなエラーerror on element from jQuery - context <div class="foo><div class="bar" ...その後、はるかに参考になる[object Event]

これも影響を受けます。

@daangeerdink @jdelaune @rosslavery @tgensol誰かが私がこれを再現するのを助けることができる最小のコードを提供できますか?

@sod確認したところ、

screen shot 2017-09-18 at 14 42 47

エラーが非常に不透明で、コードベースのどの部分がエラーをスローしているのかがわからないため、個人的に再現を提供することはできません。 使用するスタックトレースも、自分のコードなのかサードパーティのライブラリなのかを判断するためのエラーメッセージもありません。

うまくいけば、他の誰かが提供できる簡単な例を持っているといいのですが、申し訳ありませんが、これ以上の支援はできませんでした。

私たちもこの問題を抱えています。 過去10日間のデータを共有できます(このタイプのイベントは22k、ユーザーは13k)。 それがあなたがそれを再現するのに役立つことを願っています。
image

image

image

@kamilogorekこのタイプのエラーは200万件あります。 それが私たちの問題だと思いましたが、正しく追跡することができませんでした。

問題を見つけました。 ErrorEventによってエラーとして扱われていませんisError見つけることができる機能、UTILこちら。 便宜上、関数定義も貼り付けます。

function isError(value) {
  switch ({}.toString.call(value)) {
    case '[object Error]':
      return true;
    case '[object Exception]':
      return true;
    case '[object DOMException]':
      return true;
    default:
      return value instanceof Error;
  }
}

コンソールで簡単なテストを行って、この関数がErrorEventに対してtrueを返すかどうかを確認しましたが、そうではありませんでした。

image

isErrorは、 captureExceptionメソッドで使用され、例外パラメーターがエラーであるか、単にメッセージであるかを判別します。 captureExceptionは、例外が_実際に_エラーではないと判断した場合、 captureMessageを使用してダッシュボードに例外を送信します。 この場合、Ravenはスタックトレースを計算したり、例外を「処理」したりしません。 そのまま送り出します。

ErrorEventオブジェクトに対してtrueを返すようにisErrorを更新すべきでない理由はありますか?

ErrorEventオブジェクトに対してtrueを返すようにisErrorを更新すべきでない理由はありますか?

はい。 実際にはError子孫ではないためです( Event子孫です)。 たとえば、 stackプロパティはありません(AFAICT、コンソールで遊んでいます)。 つまり、実際には正しく処理されない可能性があります。

このエラーがどのように生成されるかの例をライブで見て、それを処理するための最良の方法を理解できると便利です。

コンストラクタErrorEventかかるErrorそのようにあなたがそれらを簡単に扱うことができるように、:

if (isErrorEvent(ex)) {
    ex = ex.error;
}

ここで構造の定義を見ることができErrorEventInitハッシュを見てください。 これはオプションのパラメーターなので、上記のソリューションでは、 ErrorEvent.errorが未定義の場合は処理されないと思います。

私はちょうどそれがちょうど増強など、単純なようではないことを意味-確かに、私はこれを解決することができると信じてisError返すためにtrue

わかります。 数分でPRをします。

3.19.x修正

ありがとう@shcallaway! 👍

3.19.1まだこの問題が発生しているようです🤔
image
image

@PhilippSpoこのイベントはどのブラウザから来ていますか? ErrorEventは、一部の古いモバイルブラウザとIEでサポートされていないため、通常のソリューションにフォールバックする必要がありました。

@kamilogorek Chrome 61.0.3163

Chrome61でも見ています。 😕私はすぐにそれを調べようとします。

ありがとう@shcallaway

Safari 11.0、Mac OS10.13でも発生します

'message'パラメータがErrorEventオブジェクトの場合、 traceKitWindowOnErrorは入力パラメータを正しく処理しないよう
screen shot 2017-11-06 at 11 36 34
'ex'は未定義です。 次に、 'message'フィールドが文字列ではなくErrorEventであるオブジェクトを使用してnotifyHandlersを呼び出します。
screen shot 2017-11-06 at 11 41 14
これは、_makeRequestで強調すると、意味のないメッセージを生成します。

調査@ michal-rumanekに感謝します、私はすぐにこの問題を処理しようとします(今週は暇がありません)。

@kamilogorek 、何か進展はありますか? ;-)

こんにちは、私はこれらのエラーをたくさん受けています[object Object]
screenshot 2017-12-01 09 41 20

Angular 4
Chrome 62.0.3202
Raven-js 3.20.1

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