スコープを区切ってカスタマイズ
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