偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

FastAPI 中如何使用 Middleware 實現請求日志和耗時統(tǒng)計?

開發(fā)
本文將帶你一步步實現一個通用的請求耗時統(tǒng)計中間件,并自動記錄日志(方法、路徑、耗時等信息)。

在日常開發(fā)中,我們經常需要統(tǒng)計每個請求的耗時、記錄訪問日志,便于監(jiān)控接口性能和排查問題。在 FastAPI 中,這種需求的最佳實踐方式就是 —— 使用中間件(Middleware)!

本文將帶你一步步實現一個通用的請求耗時統(tǒng)計中間件,并自動記錄日志(方法、路徑、耗時等信息)。

什么是 Middleware?

Middleware(中間件)是介于請求進入與響應返回之間的一段可插拔邏輯,可以用來處理:

  • 日志記錄
  • 請求耗時
  • 權限校驗
  • 跨域處理(CORS)
  • 請求頻率限制(Rate Limit)等

FastAPI 提供了便捷的方式來自定義中間件,核心是通過裝飾器或注冊機制封裝函數。

實現一個耗時統(tǒng)計中間件

我們下面寫一個中間件,來統(tǒng)計每個請求從進入到響應返回所花費的時間,并將日志打印出來:

middlewares/request_timer.py

import time
from fastapi import Request
from starlette.middleware.base import BaseHTTPMiddleware
import logging

# 設置日志輸出
logger = logging.getLogger("request_logger")
logger.setLevel(logging.INFO)

handler = logging.StreamHandler()
formatter = logging.Formatter('[%(asctime)s] %(levelname)s: %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)


class RequestTimerMiddleware(BaseHTTPMiddleware):
    async def dispatch(self, request: Request, call_next):
        start_time = time.time()

        response = await call_next(request)  # 執(zhí)行請求處理鏈

        process_time = time.time() - start_time
        formatted_time = f"{process_time * 1000:.2f}ms"

        logger.info(f"{request.method} {request.url.path} - 耗時: {formatted_time}")

        # 可以添加到響應頭中返回
        response.headers["X-Process-Time"] = formatted_time
        return response

如何在項目中啟用中間件?

只需在創(chuàng)建 FastAPI 應用實例時添加:

main.py

from fastapi import FastAPI
from middlewares.request_timer import RequestTimerMiddleware

app = FastAPI()

# 添加中間件
app.add_middleware(RequestTimerMiddleware)

# 示例路由
@app.get("/ping")
async def ping():
    return {"message": "pong"}

訪問接口 /ping 后你將看到如下日志輸出:

[2025-04-29 10:30:00] INFO: GET /ping - 耗時: 2.33ms

可擴展的點

你還可以在中間件中擴展更多功能,比如:

  • 記錄響應狀態(tài)碼
  • 日志落盤或輸出到日志平臺(如 ELK)
  • 日志中包含 IP、User-Agent、用戶信息等
  • 將日志結構化為 JSON 格式(便于日志平臺解析)

總結

通過中間件的方式,我們實現了:

  • 請求耗時統(tǒng)計
  • 請求路徑和方法記錄
  • 響應頭中加入處理時間

這是構建高質量 Web API 服務的必備實踐,尤其對 運維監(jiān)控和性能分析 非常有幫助。

責任編輯:趙寧寧 來源: Ssoul肥魚
相關推薦

2025-02-04 09:58:08

2024-11-08 09:06:16

agentJava探針

2017-04-13 10:14:46

curl命令分析

2024-10-31 13:56:30

FastAPIGradioDjango

2023-04-18 08:27:16

日志級別日志包

2024-12-18 12:10:00

2023-12-25 11:18:12

OpenTeleme應用日志Loki

2020-12-03 07:43:03

JS Ajax JavaScript

2009-03-24 13:04:55

匯總組織結構Oracle

2021-04-22 05:37:14

Axios 開源項目HTTP 攔截器

2025-02-22 08:00:00

AgentSpringBootJava

2010-08-19 14:54:07

DB2 優(yōu)化器

2023-05-11 07:25:57

ReduxMiddleware函數

2025-05-14 08:16:46

?Redis機器學習推薦模型

2025-06-16 07:55:29

2013-05-21 10:58:43

Log4jActiveMQSpring

2023-02-16 09:52:46

journalctlsystemdLinux

2025-03-05 08:40:00

RedisJava開發(fā)

2022-01-28 14:20:53

前端代碼中斷

2023-06-26 10:51:56

開源API
點贊
收藏

51CTO技術棧公眾號