1. 简介
FastAPI是一款高性能的Web框架,它提供了简洁的API设计和强大的自动文档生成功能,同时支持异步处理和易于测试等特性,在Python后端开发中有着广泛的应用。在实际应用中,我们通常需要实现对请求进行日志记录和监控,以便于问题的排查和性能的优化。本文将介绍如何在FastAPI中实现请求日志记录和监控。
2. 实现请求日志记录
2.1 安装依赖包
在FastAPI中实现请求日志记录,需要使用到Python的logging模块。在开始之前,我们需要安装对应的依赖包:
pip install loguru
Loguru是Python的一款日志库,它提供了Python中logging模块所没有的强大功能,如自动旋转日志文件、根据不同的日志等级输出到不同的地方、结构化日志等。
2.2 配置日志
在FastAPI项目中,我们通常会在main.py文件中进行启动时的配置。在这里,我们需要进行日志的配置。具体的配置内容可以根据自己的需要进行定义。以下是一个示例:
import logging
from loguru import logger
from fastapi import FastAPI
app = FastAPI()
logger.remove()
logger.add("logs/error.log", level="ERROR", rotation="10 MB")
logger.add("logs/debug.log", rotation="10 MB")
@app.on_event("startup")
async def startup():
logger.info("Application started")
@app.on_event("shutdown")
async def shutdown():
logger.info("Application stopped")
在这个示例中,我们使用loguru创建了两个日志文件:logs/error.log和logs/debug.log。error.log记录了应用中的错误信息,debug.log记录了调试信息。当日志文件大小达到10MB时,会自动进行轮转,即创建新的日志文件继续记录日志。我们可以在FastAPI的startup和shutdown事件中记录应用的启动和停止信息。
2.3 记录请求日志
在配置好日志之后,我们就可以开始在请求中进行日志的记录了。以下是一个示例:
from typing import Optional
from loguru import logger
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root(user_agent: Optional[str] = None):
logger.info(f"User-Agent: {user_agent}")
return {"Hello": "World"}
在这个示例中,我们为根路径的处理函数增加了一个user_agent参数,并在函数内部使用loguru记录了请求中的User-Agent信息。我们可以根据需要自定义日志的格式和内容。
3. 实现请求监控
除了进行日志记录之外,我们还需要对请求进行监控以便于及时发现问题和进行性能优化。在FastAPI的文档中,提供了一些API的性能监控工具,如/me/docs/stats。
3.1 使用自定义中间件
除了FastAPI提供的监控工具之外,我们还可以实现自己的监控中间件,并将其集成到应用中。以下是一个示例:
import time
from fastapi import FastAPI, Request
from loguru import logger
app = FastAPI()
@app.middleware("http")
async def monitor_requests(request: Request, call_next):
start_time = time.time()
response = await call_next(request)
elapsed_time = int((time.time() - start_time) * 1000)
logger.info(f"Request: {request.method} {request.url.path} elapsed time: 0.3119ms response status: {response.status_code}")
return response
@app.get("/")
async def read_root():
return {"Hello": "World"}
在这个示例中,我们创建了一个名为monitor_requests的中间件,在应用的每个HTTP请求进入处理函数之前都会先被调用。在该中间件中,我们记录了请求的消耗时间、请求路径以及响应状态码等信息。
4. 总结
本文介绍了如何在FastAPI中实现请求日志记录和监控。通过使用Loguru和自定义中间件,我们可以方便地记录请求中的信息和进行请求性能监控。这些工具和技术可以帮助我们更好地排查问题、做出优化和调整。