如何在FastAPI中實現請求日誌記錄和監控
引言:
FastAPI是一個基於Python 3.7 的高效能Web框架,它提供了許多強大的功能和特性,包括自動化的請求和響應模型驗證、安全性、效能最佳化等。在實際開發中,我們經常需要在應用程式中記錄請求日誌以便進行排錯和監控分析。本文將介紹如何在FastAPI中實作請求日誌記錄和監控,並提供對應的程式碼範例。
一、安裝依賴套件
在開始之前,我們需要先安裝一些必要的依賴套件。開啟終端,執行以下指令:
pip install fastapi uvicorn loguru
其中,loguru是一個易用的日誌記錄庫,我們將使用它來記錄請求日誌。
二、建立一個FastAPI應用程式
首先,我們需要建立一個FastAPI應用程式。在專案目錄下,建立一個名為main.py的文件,並寫入以下程式碼:
from fastapi import FastAPI app = FastAPI() @app.get("/") async def root(): return {"message": "Hello World"}
三、記錄請求日誌
接下來,我們將使用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庫的logger對象,並新增一個檔案日誌記錄器。我們指定了記錄日誌檔案的路徑為logs/request.log,並設定了日誌檔案的最大大小為10MB。然後,在root()函數中,我們使用logger.info()方法記錄請求日誌。
四、啟動應用程式
儲存main.py檔案並返回終端,執行以下命令啟動FastAPI應用程式:
uvicorn main:app --reload
終端將輸出應用程式的存取URL,如http: //127.0.0.1:8000。在瀏覽器中造訪該URL,我們將看到"Hello World"訊息。開啟logs/request.log文件,我們將看到請求日誌的記錄。
五、監控請求
除了記錄請求日誌,我們還可以監控請求的處理時間和狀態碼。為了實現這個功能,我們需要使用FastAPI提供的Middleware。在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)
上述程式碼中,我們首先匯入time模組,並在root()函數中新增了一個睡眠時間,以模擬請求處理時間。然後,我們在log_request()中間件函數中加入了計算請求處理時間和記錄請求狀態碼的邏輯。在shutdown_event()函數中,我們刪除了先前新增的日誌記錄器。
現在,重新啟動FastAPI應用程序,並在瀏覽器中存取應用程式的URL。在瀏覽器中刷新頁面,打開logs/request.log文件,我們將看到包含請求方法、URL、狀態碼和處理時間的請求日誌記錄。
結論:
本文介紹如何在FastAPI中實作請求日誌記錄和監控。我們使用loguru函式庫來記錄請求日誌,並藉助FastAPI的Middleware來監控請求的處理時間和狀態碼。透過這些功能,我們可以更好地追蹤和監控應用程式的請求和回應。以上就是實作請求日誌記錄和監控的程式碼範例。
參考資料:
以上是如何在FastAPI中實現請求日誌記錄和監控的詳細內容。更多資訊請關注PHP中文網其他相關文章!