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

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

引言:
FastAPI是一个基于Python 3.7+的高性能Web框架,它提供了许多强大的功能和特性,包括自动化的请求和响应模型验证、安全性、性能优化等。在实际开发中,我们经常需要在应用程序中记录请求日志以便进行排错和监控分析。本文将介绍如何在fastapi中实现请求日志记录和监控,并提供相应的代码示例。

一、安装依赖包
在开始之前,我们需要安装一些必要的依赖包。打开终端,执行以下命令:

pip install fastapi uvicorn loguru

登录后复制

其中,loguru是一个易用的日志记录库,我们将使用它来记录请求日志。

二、创建一个FastAPI应用程序
首先,我们需要创建一个FastAPI应用程序。在项目目录下,创建一个名为main.py的文件,并写入以下代码:

from fastapi import FastAPIapp = FastAPI()@app.get("/")async def root():    return {"message": "Hello World"}

登录后复制

三、记录请求日志
接下来,我们将使用loguru库来记录请求日志。在main.py文件中添加以下代码:

from loguru import loggerimport uvicornfrom fastapi import FastAPIapp = 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 loggerimport timeimport uvicornfrom fastapi import FastAPI, Requestfrom fastapi.middleware.cors import CORSMiddlewareapp = 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中实现请求日志记录和监控的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2229710.html

(0)
上一篇 2025年2月26日 13:54:13
下一篇 2025年2月26日 13:54:38

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • HTML实现海康摄像头实时监控功能_HTML/Xhtml_网页制作

    最近公司安排我做一个ccfa的小东东,其中有一项需求就是做一个网页播放摄像头的实时监控功能,对于我这个小菜鸟来说真是难到了,下面小编给大家带来了html实现海康摄像头实时监控功能,对html感兴趣的朋友一起看看吧 最近公司安排做CCFA的一…

    2025年4月1日 编程技术
    100
  • 实现输入框与下拉框联动

    下面我就为大家分享一篇实时监控input框,实现输入框与下拉框联动的实例,具有很好的参考价值,希望对大家有所帮助。 如图: html代码  奖励类型:       —请选择—   {foreach $reward as $value…

    2025年3月31日
    100
  • Nginx访问日志配置指南,监控网站访问行为

    nginx访问日志配置指南,监控网站访问行为 Nginx是一个高性能的Web服务器,广泛用于搭建静态或动态网站。在搭建网站的过程中,我们经常需要对网站的访问行为进行监控和分析。Nginx提供了强大的访问日志配置功能,能够帮助我们实现对网站的…

    编程技术 2025年3月30日
    100
  • 如何通过Linux命令行工具进行系统日志分析和监控?

    如何通过linux命令行工具进行系统日志分析和监控? 在Linux系统中,系统日志是记录操作系统和应用程序运行时产生的事件、错误和警告的重要工具。对系统日志进行分析和监控可以帮助管理员及时发现和解决问题,保证系统的稳定运行。本文将介绍如何使…

    编程技术 2025年3月13日
    200
  • Java开发:如何进行日志管理和监控

    Java开发:如何进行日志管理和监控,需要具体代码示例 摘要:日志是开发过程中不可或缺的组成部分。本文将介绍如何在Java开发中进行日志管理和监控,并给出具体的代码示例。 引言:在现代软件开发中,日志是一个非常重要的部分。它不仅提供了调试和…

    2025年3月13日
    200
  • 向日葵远程控制会被监控吗?向日葵远程控制会泄露隐私吗?

    php小编子墨向大家介绍一款远程控制软件——向日葵。在使用向日葵远程控制时,很多用户都担心自己的隐私是否会被泄露,是否会受到监控。因此,今天我们将针对这些问题展开讨论,解答大家的疑虑。   向日葵远程控制会被监控吗   答:不会。   向日…

    2025年3月9日
    200
  • FormData+Ajax上传进度监控(附代码)

    这次给大家带来FormData+Ajax上传进度监控(附代码),FormData+Ajax上传进度监控的注意事项有哪些,下面就是实战案例,一起来看一下。 什么是FormData? FormData对象可以组装一组用 XMLHttpReque…

    编程技术 2025年3月8日
    200
  • jQuery怎么做出监控页面ajax请求

    这次给大家带来jQuery怎么做出监控页面ajax请求,jQuery做出监控页面ajax请求的注意事项有哪些,下面就是实战案例,一起来看一下。 你是不是有遇到这样的问题:页面发起两个ajax请求,希望它们都成功以后,再做一个动作? 很容易想…

    编程技术 2025年3月8日
    200
  • FormData+Ajax实现上传进度监控

    formdata类型其实是在xmlhttprequest 2级定义的,它是为序列化表以及创建与表单格式相同的数据(当然是用于xhr传输)提供便利。接下来通过本文给大家分享formdata+ajax实现上传进度监控,需要的朋友一起看看吧 什么…

    编程技术 2025年3月8日
    200
  • jQuery实现监控页面所有ajax请求的方法

    这篇文章主要介绍了jquery实现监控页面所有ajax请求的方法,涉及jquery中ajax请求的判定技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了jQuery实现监控页面所有ajax请求的方法。分享给大家供大家参考,具体…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论