スコープを区切ってカスタマイズ
SQSのキューイングが失敗した際の例
Sentry.with_scope do |scope| を利用するとこの中で set_したものは
このスコープの中でだけ有効になります。
failed_context = response.successful.map { |entry| [entry[:id], entry] }.to_h
message = "SQS送信に失敗したユーザID: #{failed_context.keys}"
Sentry.with_scope do |scope|
scope.set_tags(failed_ids: "タグ")
scope.set_context('送信に失敗したID', failed_context)
Sentry.capture_message("SQSへの登録に失敗しました")
end
| メソッド名 | 説明 |
|---|---|
| configure_scope | このメソッドを使うと、その後発生する全てのエラーログに対して適用されるグローバルなスコープを設定することができます。例えば、すべてのエラーに共通のユーザ情報を追加したいときに使います。 |
| with_scope | このメソッドを使うと、一時的(そのブロック内限定)なスコープを作成できます。ブロックが終了すると、そのブロック内で設定したスコープはクリアされます。独自のエラーメッセージや一時的なエラー処理に追加情報を提供したい場合に使います。 |
| push_scope |
push_scopeも新たなスコープを作るメソッドで、with_scopeと同様に一時的なスコープを作成します。ただし、push_scopeは新たなスコープをスタックに積む(push)ため、複数のスコープを重ねて利用することができます。そのため、深いネストの中で一時的なスコープを作成しつつ、外側のスコープへの影響を避けたい場合に有用です。 |
意図的な raise とともにエラーを送りたい
raise すると Sentry に自動で通知されると思います
なので Sentry capture exception を実行すると多重送信になってしまうのを
こちらで防いでます。
failed_context = errors.index_by { |entry| entry[:id] }
Sentry.with_scope do |scope|
scope.set_context("送信に失敗したID", failed_context)
begin
raise "SQSへの登録に失敗しました"
rescue StandardError => e
Sentry.capture_exception(e)
raise e
end
end