🛎️
Strawberry GraphQLでキャッチした例外・エラーを Rollbar にスタックトレース付きでレポートする
Strawberry GraphQL を使ったQuery, Mutation のエラーや例外が Rollbar にレポートされなかったので調べた。公式ドキュメントと、以下のQiitaの記事を参考にしてカスタムスキーマを実装し、オーバライドしたメソッドで rollbar.report_exc_info
を実行することでうまくいった。
コード
class CustomSchema(Schema):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def process_errors(
self,
errors: List[GraphQLError],
execution_context: Optional[ExecutionContext] = None,
):
for error in errors:
StrawberryLogger.error(error, execution_context=execution_context)
rollbar.report_exc_info(
exc_info=(
error.original_error,
error.original_error.__str__(),
error.original_error.__traceback__,
),
extra_data={ # 以下はお好みで
"original_error": error.original_error,
"context": execution_context.context.__dict__,
"execution_context": execution_context.__dict__,
"result": (
execution_context.result.data
if execution_context.result
else None
),
},
)
exc_info
には、sys.exc_info()
を渡すことでエラー型やスタックトレースが渡される仕組みだが、process_errors
で補足している時点では正常にエラーが取れなかったため、errors
/ error
がもっている original_error
のスタックトレース、エラー情報を sys.exc_info()
の戻り値に合わせたタプルにすることでスタックトレース付きでレポートされるようになった。
そのほかは元の参考記事と同じなので割愛。
Discussion