FastAPI でリクエストのログ記録と監視を実装する方法
はじめに:
FastAPI は、Python 3.7 をベースとした高性能 Web フレームワークであり、自動リクエストと応答モデルを含む多くの強力な機能を提供します。検証、セキュリティ、パフォーマンスの最適化など。実際の開発では、デバッグや監視分析のためにアプリケーションにリクエストのログを記録する必要があることがよくあります。この記事では、FastAPI でリクエストのログ記録と監視を実装する方法を紹介し、対応するコード例を示します。
1. 依存関係パッケージをインストールする
始める前に、必要な依存関係パッケージをいくつかインストールする必要があります。ターミナルを開き、次のコマンドを実行します。
pip install fastapi uvicorn loguru
その中でも、loguru は使いやすいログ ライブラリです。リクエスト ログを記録するために使用します。
2. FastAPI アプリケーションの作成
まず、FastAPI アプリケーションを作成する必要があります。プロジェクト ディレクトリに、main.py という名前のファイルを作成し、次のコードを記述します:
from fastapi import FastAPI app = FastAPI() @app.get("/") async def root(): return {"message": "Hello World"}
3. リクエスト ログを記録する
次に、loguru ライブラリを使用してリクエスト ログを記録します。次のコードを main.py ファイルに追加します。
from loguru import logger import uvicorn from fastapi import FastAPI app = FastAPI() @app.on_event("startup") async def startup_event(): logger.add("logs/request.log", rotation="10 MB") @app.get("/") async def root(): logger.info("Hello World") return {"message": "Hello World"} if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=8000)
上記のコードでは、最初に loguru ライブラリのロガー オブジェクトをインポートし、ファイル ロガーを追加します。ログ ファイルのパスを logs/request.log として指定し、ログ ファイルの最大サイズを 10MB に設定しました。次に、root() 関数で、logger.info() メソッドを使用してリクエストを記録します。
4. アプリケーションを開始します
main.py ファイルを保存してターミナルに戻り、次のコマンドを実行して FastAPI アプリケーションを開始します:
uvicorn main:app --reload
ターミナルはアクセス URL を出力します。 http://127.0.0.1:8000 など、アプリケーションの名前。ブラウザでこの URL にアクセスすると、「Hello World」メッセージが表示されます。 logs/request.log ファイルを開くと、リクエスト ログ レコードが表示されます。
5. リクエストの監視
リクエスト ログの記録に加えて、リクエストの処理時間とステータス コードも監視できます。この機能を実装するには、FastAPI が提供するミドルウェアを使用する必要があります。次のコードを main.py ファイルに追加します。
from loguru import logger import time import uvicorn from fastapi import FastAPI, Request from fastapi.middleware.cors import CORSMiddleware app = FastAPI() @app.on_event("startup") async def startup_event(): logger.add("logs/request.log", rotation="10 MB") @app.on_event("shutdown") async def shutdown_event(): logger.remove(handler_id="request_logger") @app.middleware("http") async def log_request(request: Request, call_next): start_time = time.time() response = await call_next(request) process_time = time.time() - start_time logger.info( "Request: {method} {url} {status_code} {process_time:.2f}ms", method=request.method, url=request.url, status_code=response.status_code, process_time=process_time * 1000, ) return response @app.get("/") async def root(): logger.info("Hello World") return {"message": "Hello World"} if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=8000)
上記のコードでは、最初に時間モジュールをインポートし、リクエストの処理時間をシミュレートするために root() 関数にスリープ時間を追加します。次に、リクエストの処理時間を計算し、リクエストのステータス コードを記録するロジックを log_request() ミドルウェア関数に追加しました。 shutdown_event() 関数では、以前に追加したロガーを削除します。
ここで、FastAPI アプリケーションを再起動し、ブラウザーでアプリケーションの URL にアクセスします。ブラウザでページを更新し、logs/request.log ファイルを開くと、リクエスト メソッド、URL、ステータス コード、処理時間などのリクエスト ログ レコードが表示されます。
結論:
この記事では、FastAPI でリクエストのログ記録と監視を実装する方法を紹介します。 loguruライブラリを使用してリクエストログを記録し、FastAPIのミドルウェアを使用してリクエストの処理時間とステータスコードを監視します。これらの機能により、アプリケーションのリクエストと応答をより適切に追跡および監視できるようになります。上記は、リクエストのロギングとモニタリングを実装するコード例です。
参考資料:
以上がFastAPI でリクエストのロギングとモニタリングを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。