首頁  >  文章  >  後端開發  >  如何在FastAPI中實現請求日誌記錄和監控

如何在FastAPI中實現請求日誌記錄和監控

WBOY
WBOY原創
2023-07-30 08:29:393958瀏覽

如何在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官方文件:https://fastapi.tiangolo.com/
  • loguru官方文件:https://loguru.readthedocs. io/
#

以上是如何在FastAPI中實現請求日誌記錄和監控的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn