成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

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

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

什么是 Middleware?

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

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

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

實現(xiàn)一個耗時統(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 格式(便于日志平臺解析)

總結

通過中間件的方式,我們實現(xiàn)了:

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

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

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

2025-02-04 09:58:08

2024-11-08 09:06:16

agentJava探針

2024-10-31 13:56:30

FastAPIGradioDjango

2017-04-13 10:14:46

curl命令分析

2023-04-18 08:27:16

日志級別日志包

2020-12-03 07:43:03

JS Ajax JavaScript

2021-04-22 05:37:14

Axios 開源項目HTTP 攔截器

2024-12-18 12:10:00

2023-12-25 11:18:12

OpenTeleme應用日志Loki

2009-03-24 13:04:55

匯總組織結構Oracle

2010-08-19 14:54:07

DB2 優(yōu)化器

2025-02-22 08:00:00

AgentSpringBootJava

2023-02-16 09:52:46

journalctlsystemdLinux

2025-06-16 07:55:29

2025-05-14 08:16:46

?Redis機器學習推薦模型

2023-05-11 07:25:57

ReduxMiddleware函數(shù)

2013-05-21 10:58:43

Log4jActiveMQSpring

2022-01-28 14:20:53

前端代碼中斷

2022-11-22 08:41:22

curlDELETELinux

2025-03-05 08:40:00

RedisJava開發(fā)
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 911影院 | 久久精品国产久精国产 | 激情自拍偷拍 | 久久久久国产一区二区三区四区 | 一区二区av | 午夜精品一区二区三区在线观看 | 成人一级片在线观看 | 操操日 | 在线国产视频 | 日本大香伊一区二区三区 | 日韩欧美中文 | 草b视频 | 日韩在线视频免费观看 | 91人人看| 免费观看av | 国产美女一区二区 | 免费看黄视频网站 | 91成人 | 国产亚洲欧美在线 | 成人免费观看男女羞羞视频 | 久久久一区二区三区 | 国产亚洲欧美在线视频 | 国产一二三区电影 | 欧美日韩精选 | 久久久精品网站 | 日韩有码一区 | 激情毛片 | 九九久久国产 | 精品久久国产 | 在线成人| 国产精品视频免费观看 | 国产日韩精品一区二区 | 国产精品片aa在线观看 | 影音先锋男 | 国外成人在线视频 | 欧美不卡视频 | 亚洲一区中文字幕 | 亚洲国产精品一区二区第一页 | 国产96色在线 | 国产一级电影在线 | 日本久久一区 |