如何在FastAPI中实现请求日志记录和监控

2023年 8月 8日 62.1k 0

如何在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)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论