• fastapi_No.24_日志记录系统


    第一步:创建日志记录器

    利用loguru包创建一个日志记录器。

    from loguru import logger
    from datetime import timedelta
    
    # 第一步:创建一个日志记录器
    # 清除默认日志记录器
    logger.remove()
    # 创建新的日志记录器
    # 每天生成一个日志文件,文件名称时年-月-日的形式命名
    # 日志文件保存7天
    logger.add(
        sink="./No22_日志处理/logs/{time:YYYY-MM-DD}.log",
        format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}",
        level="INFO",
        rotation="1 days",
        retention=timedelta(days=7)
        )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    第二步:挂载日志记录器

    利用FastAPI实例对象的state属性挂载日志记录器。

    from fastapi import FastAPI
    app = FastAPI()
    @app.on_event("startup")
    def startup_event():
        # 在系统启动时,挂载日志记录器
        # 第二步:为app注册一个公共的日志记录器
        app.state.logger = logger
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    第三步:使用日志记录

    在使用日志记录信息时有两种方式:
    1.利用logger的catch装饰器记录异常
    2.利用logger的info,debug,error等方法记录响应的事件信息

    # 第三步:在路径操作函数中试用日志记录器记录日志
    @app.get("/")
    # 利用logger.catch装饰器可以记录异常信息
    @logger.catch
    def getHome(req:Request):
        # 利用req的app属性可以访问到整个app
        req.app.state.logger.info("访问首页")
        return "/home"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    第四步:清除日志记录器

    当系统关闭时,需要清除日志记录器。

    @app.on_event("shutdown")
    def shutdown_event():
        # 第四步:清除日志记录器
        app.state.logger.remove()
    
    • 1
    • 2
    • 3
    • 4

    完整代码

    from fastapi import FastAPI,Request
    from loguru import logger
    from datetime import timedelta
    
    # 第一步:创建一个日志记录器
    # 清除默认日志记录器
    logger.remove()
    # 创建新的日志记录器
    # 每天生成一个日志文件,文件名称时年-月-日的形式命名
    # 日志文件保存7天
    logger.add(
        sink="./No22_日志处理/logs/{time:YYYY-MM-DD}.log",
        format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}",
        level="INFO",
        rotation="1 days",
        retention=timedelta(days=7)
        )
    
    app = FastAPI()
    @app.on_event("startup")
    def startup_event():
        # 在系统启动时,挂载日志记录器
        # 第二步:为app注册一个公共的日志记录器
        app.state.logger = logger
    
    @app.on_event("shutdown")
    def shutdown_event():
        # 第四步:清除日志记录器
        app.state.logger.remove()
    
    # 第三步:在路径操作函数中试用日志记录器记录日志
    @app.get("/")
    # 利用logger.catch装饰器可以记录异常信息
    @logger.catch
    def getHome(req:Request):
        # 利用req的app属性可以访问到整个app
        req.app.state.logger.info("访问首页")
        return "/home"
    
    if __name__ =="__main__":
        import uvicorn
        uvicorn.run(app='main:app',host="127.0.0.1",port=8080,reload=True)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    在这里插入图片描述

  • 相关阅读:
    软考高级-系统架构师-案例分析-数据库真题考点汇总
    【日记】gulp之删除文件
    记一次服务CPU过高排查
    spark写带sasl认证的kafka
    SpringCloud Alibaba微服务第4章Docker安装Nacos
    Linux入门攻坚——4、shell编程初步、grep及正则表达式
    maven配置代理
    Kotlin基础——枚举、When、in、for
    宝塔面板8.0.3添加数据库mysql8.0版本会提示服务器状态异常问题的解决方案
    7.联合索引(最左前缀原则)
  • 原文地址:https://blog.csdn.net/baidu_38766791/article/details/128115197