質問

「概念実証」を開発しました;アプリケーションからの未処理の例外をバグ追跡システムに記録するアプリケーション(この場合はTeam Foundation Serverですが、任意のバグ追跡システムである可能性があります)。このアイデアの制限は、同じ例外がスローされるたびに重複するバグアイテムが開かれないようにすることです(たとえば、多くのユーザーが例外に遭遇します-まだ1つの「バグ」です)。

最初の試みは、例外タイプ、メッセージ、およびスタックトレースをバグ追跡システムのフィールドとして保存することでした。ロギングコンポーネントは、バグ「ストア」に対してクエリを実行します。同じ情報を持つ未解決のバグがあるかどうかを確認します。 (この例は.NETですが、コンセプトはプラットフォームに依存しないと思います)。

明らかに問題は、これらのフィールドが非常に大きくなる可能性があることで(特にスタックトレース)、「フルテキスト」が必要です。それらを保存するための実装のタイプと検索は非常に高価です。

この問題に対してどのようなアプローチが定義されているのか疑問に思っていました。たとえば、FogBugzには自動化されたバグ追跡のためのこのような機能があり、どのように実装されているのか興味がありました。

役に立ちましたか?

解決

スタックトレースのチェックサムハッシュを作成し、インデックス付き列として保存できます。そうすれば、挿入時の重複を避けるために、バグストアへのクエリが非常に高速になります。

他のヒント

スタックトレースがある場合は、スタックトレースの最後のステートメントを見つけて、既に記録されているステートメントと比較できます。シンボルが含まれていた場合、行番号も取得できます。それで、比較のために、実際のエラー番号と失敗したステートメント、そして実際の行番号の2つがあります。それらのすべてで既にログに記録されているものがある場合、同じ問題である可能性が高い(もちろん100%ではありません)。

実際には、おそらく「at」でスタックトレースを解析できます。スタックトレースの各行は「at」で始まるため、したがって、最後の「at」を探し、その行を取得し、同じ最後の「at」と比較します。保存されたスタックトレースの行、そして実際に何かがあるかもしれません。

HTH!

例外を集約する既存のオープンソースソリューションの1つのソースコードを見ることができます。

例: https://github.com/getsentry/sentry/tree / master / src / sentry

これは単純な問題ではなく、複雑なヒューリスティックがあります(たとえば、同じ例外が異なるブラウザで異なる方法で報告される、たとえば、ブラウザ拡張機能によって引き起こされる例外は一般的であり、ほとんど重要ではありません)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top