如何在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中实现请求日志记录和监控的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!