首页 > 编程语言 >python系列:python fastapi + uvicorn 记录日志的最佳实践,结合nb_log

python系列:python fastapi + uvicorn 记录日志的最佳实践,结合nb_log

时间:2024-06-12 17:29:40浏览次数:24  
标签:log python fastapi nb uvicorn access default 日志

python fastapi + uvicorn 记录日志的最佳实践,结合nb_log




python fastapi + uvicorn 记录日志的最佳实践,结合nb_log

python fastapi + uvicorn 记录日志的最佳实践,要记录对fastapi什么时候请求了什么url和入参,只需要记录uvicorn命名空间的日志就可以了。

文章使用nb_log 五彩日志来记录web后台的控制台日志 + 多进程安全切割的文件日志。

为什么不能nb_log.get_logger提前设置好相关命名空间的日志formatterhandlers呢?因为他是在函数内部里面运行的
D:\ProgramData\Miniconda3\Lib\site-packages\uvicorn\config.py 函数内部中logging.config.dictConfig配置的,所以需要传递log_config

fastapiweb222.py 文件内容。

from pathlib import Path
 
from fastapi import FastAPI
import nb_log
 
app = FastAPI()
 
 
@app.get("/")
async def hello_world():
    return "Hello, World!"
 
 
LOG_FILE_PATH = '/pythonlogs'
LOGGING_CONFIG: dict = {
    "version": 1,
    "disable_existing_loggers": False,
    "formatters": {
        "default": {
            "()": "uvicorn.logging.DefaultFormatter",
            "fmt": "%(asctime)s %(levelprefix)s %(message)s",  # 这里日志格式加了时间显示
            "use_colors": False,
        },
        "access": {
            "()": "uvicorn.logging.AccessFormatter",
            "fmt": '%(name)s %(asctime)s %(levelprefix)s %(client_addr)s - "%(request_line)s" %(status_code)s',
            # 这里日志格式加了时间显示
        },
    },
    "handlers": {
        "default": {
            "formatter": "default",
            "class": "logging.StreamHandler",
            "stream": "ext://sys.stderr",
        },
        # "default_file": {
        #     "formatter": "default",
        #     "class": "nb_log.handlers.ConcurrentRotatingFileHandler",  # 注意这里是多进程安全切割日志
        #     'filename': Path(LOG_FILE_PATH) / 'uvicorn_default.log',
        #     'maxBytes': 1000 * 1000 * 100,
        #     'backupCount': 3,
        # },
        "default_file": {
            "formatter": "default",
            "class": "nb_log.handlers.BothDayAndSizeRotatingFileHandler",  # 注意这里是多进程安全切割日志
            'file_name': 'uvicorn_default.log',
            'log_path': LOG_FILE_PATH,
            'max_bytes': 1000 * 1000 * 1000,
            'back_count': 10,
 
        },
 
        "access": {
            "formatter": "access",
            "class": "nb_log.handlers.ColorHandler",  # 这里用了nb_log的彩色控制台handler。
        },
        # "access_file": {
        #     "formatter": "access",
        #     "class": "nb_log.handlers.ConcurrentRotatingFileHandler",  # 注意这里是多进程安全切割日志
        #     'filename': Path(LOG_FILE_PATH) / 'uvicorn_access.log',
        #     'maxBytes': 1000 * 1000 * 100,
        #     'backupCount': 3,
        # },
        "access_file": {
            "formatter": "access",
             "class": "nb_log.handlers.BothDayAndSizeRotatingFileHandler",  # 注意这里是多进程安全切割日志
            'file_name': 'uvicorn_access.log',
            'log_path': LOG_FILE_PATH,
            'max_bytes': 1000 * 1000 * 1000,
            'back_count': 10,
        },
    },
    "loggers": {
        "uvicorn": {"handlers": ["default", "default_file"], "level": "INFO"},
        "uvicorn.error": {"level": "INFO"},
        "uvicorn.access": {"handlers": ["access", "access_file"], "level": "INFO", "propagate": False},
    },
}
 
if __name__ == "__main__":
    import uvicorn
 
    uvicorn.run('nb_http_client.tests.fastapi_server:app', host="0.0.0.0", port=8008, workers=2,log_config=LOGGING_CONFIG)

控制台截图:
在这里插入图片描述

文件日志截图:

在这里插入图片描述







北风之神c

python fastapi + uvicorn 记录日志的最佳实践,结合nb_log

标签:log,python,fastapi,nb,uvicorn,access,default,日志
From: https://blog.csdn.net/weixin_54626591/article/details/139611976

相关文章

  • Python中用PyTorch机器学习神经网络分类预测银行客户流失模型|附代码数据
    阅读全文:http://tecdat.cn/?p=8522最近我们被客户要求撰写关于神经网络的研究报告,包括一些图形和统计输出。分类问题属于机器学习问题的类别,其中给定一组特征,任务是预测离散值。分类问题的一些常见示例是,预测肿瘤是否为癌症,或者学生是否可能通过考试在本文中,鉴于银行客户的某些......
  • python中实例方法、类方法、静态方法
    实例方法self:代表类的实例类方法cls:代表类这个名称本身静态方法不能传递类的实例self,也不能传递类本身cls点击查看代码classMyClass:"""静态成员变量静态成员变量是被类的所有实例共享的访问方式:通过类名."""my_static_variable=0"......
  • python-爬虫-解决反爬机制-登录淘宝
    #-*-coding:utf-8-*-"""1、先手动登录获取cookie2、获取cookie保存在taobaoCookies.pickle文件中3、使用cookie去请求网页"""importosimportpickleimporttimefromseleniumimportwebdriverfromselenium.webdriver.support.waitimportWebDriverWa......
  • python-爬虫-playwright模块反爬
    fromplaywright.sync_apiimportPlaywright,sync_playwright,expectdefrun(playwright:Playwright)->None:#指定浏览器启动的端口#打开cmd:chrome--remote-debugging-port=9412--user-data-dir="F:\\google"#--remote-debugging-port=指定的端口......
  • 在Python中使用LSTM和PyTorch进行时间序列预测|附代码数据
    全文链接:http://tecdat.cn/?p=8145最近我们被客户要求撰写关于LSTM的研究报告,包括一些图形和统计输出。顾名思义,时间序列数据是一种随时间变化的数据类型。例如,24小时内的温度,一个月内各种产品的价格,一年中特定公司的股票价格诸如长期短期记忆网络(LSTM)之类的高级深度学习模型能......
  • PYTHON学习过程中的一些有用tips.
    开头语大家好,我是小安同学,我是大一开始学习python,面对这一门陌生的语言中间有许多的弯路,希望可以对大家的学习有所帮助。目前Python可以说是非常流行,在目前的编程语言中,Python的抽象程度是最高的,是最接近自然语言的,很容易上手。你可以用它来完成很多任务,比如数据科学、机器学......
  • python-数据分析-Matplotlib-1-进阶图形(气泡图-面积图-雷达图-玫瑰图-3D图)
    气泡图#-*-coding:utf-8-*-#气泡图#气泡图可以用来了解三个变量之间的关系,通过比较气泡位置和大小来分析数据维度之间的相关性。#例如在我们之前绘制的月收入和网购支出的散点图中,我们已经发现了二者的正相关关系,如果我们引入第三个变量网购次数,那么我们就需要使用气泡图......
  • python 代码说明 RAS基本原理
    importgmpy2q=7p=11e=13m=71if__name__=='__main__':print('step0公钥和私钥')print('公钥(n,e)')print('私钥(n,d)')#step1n=p*qprint(f'\nstep1最大公约数')......
  • SSM-小区物业管理系统-48954(免费领源码+开发文档)可做计算机毕业设计JAVA、PHP、爬虫、
    基于SSM小区物业管理系统摘要随着计算机科学技术日渐成熟,人们已经深刻认识到了计算机功能的强大,计算机已经进入到了人类社会发展的各个领域,并且发挥着十分重要的作用。每个社区的物业管理是一项系统而复杂的工作,它需要一个团队互相配合、分工协作。在该领域,传统的手工存取......
  • pythonocc基础:OCC.Core.TopAbs 类简介
    在PythonOCC库中,OCC.Core.TopAbs模块定义了一系列枚举类型,这些枚举类型代表了拓扑形状的不同类别(Topology)。这些类别是构建和操作三维几何模型的基础,特别是在处理布尔运算、几何约束、参数化设计等复杂任务时。TopAbs类提供了统一的接口来识别和区分不同的拓扑元素,是OpenCASCAD......