ホームページ > バックエンド開発 > Python チュートリアル > Python FastAPI で生の HTTP リクエストとレスポンスの本文をログに記録するにはどうすればよいですか?

Python FastAPI で生の HTTP リクエストとレスポンスの本文をログに記録するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-29 14:00:12
オリジナル
542 人が閲覧しました

How Can I Log Raw HTTP Request and Response Bodies in Python FastAPI?

Python FastAPI での生の HTTP リクエスト/レスポンス本体のログ記録

Python FastAPI では、特定のリクエスト/レスポンスの生の JSON 本文をログに記録できます。ミドルウェアまたはカスタム APIRoute クラスを使用してルートをルートします。

オプション1: ミドルウェアの使用

ミドルウェアを使用すると、リクエストと応答がエンドポイントによって処理される前に処理できます。ミドルウェアを作成するには:

@app.middleware("http")
async def middleware(request: Request, call_next):
    # ...
    return await call_next(request)
ログイン後にコピー

request.body() メソッドまたは request.stream() メソッドを使用して、リクエスト本文を使用します。後でログを記録できるよう、本文を BackgroundTask に保存します。

応答本文については、カスタム コードを使用して読み取り、保存します。

res_body = b''
async for chunk in response.body_iterator:
    res_body += chunk
ログイン後にコピー

その後、リクエスト本文と応答本文の両方を内部に記録できます。応答時間への影響を避けるために、BackgroundTask を使用します。

オプション 2: カスタム APIRoute の使用クラス

リクエストとレスポンスの本文を処理するカスタム APIRoute クラスを作成します:

class LoggingRoute(APIRoute):
    # ...
    async def custom_route_handler(request: Request) -> Response:
        # ...
        return response
ログイン後にコピー

カスタム ルート ハンドラーで、リクエストの本文を消費し、オプション 1 と同様にレスポンスの本文を処理します。このアプローチを使用すると、ログを特定のルートに制限できます。 APIRouters.

考慮事項

  • 大きなリクエスト/応答本体 (> サーバー RAM) はメモリの問題を引き起こす可能性があります。
  • ストリーミング応答で発生する可能性があります応答全体が先に読み取られることによるクライアント側の問題または遅延
  • 大規模な応答またはストリーミング応答を返すエンドポイントの使用制限または代替ロギング戦略を検討してください。

以上がPython FastAPI で生の HTTP リクエストとレスポンスの本文をログに記録するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート