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


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

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

    fastapiweb222.py  文件内容。
    from pathlib import Path
    import uvicorn
    from fastapi import FastAPI
    import nb_log
    import requests
    
    logger = nb_log.get_logger('fastapi_demo',)
    nb_log.get_logger('urllib3')
    
    app = FastAPI()
    
    
    @app.get("/")
    def read_root():
        logger.debug('绿色')
        logger.info('蓝色')
        logger.warning('黄色')
        logger.error('粉红色')
        logger.critical('血红色')
    
        requests.get('http://www.baidu.com')  # 日志回自动记录requests包发的任何请求,因为requests调用urllib3,而nb_log.get_logger('urllib3')对urllib3的日志命名空间添加了handler。
    
        return {"Hello": "World"}
    
    
    if __name__ == '__main__':
        # log_config = uvicorn.config.LOGGING_CONFIG
        # log_config["handlers"]["access"]["class"] = "nb_log.handlers.ColorHandler"
        # log_config["handlers"]["default"]["class"] = "nb_log.handlers.ColorHandler"
    
        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": '%(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,
                },
                "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,
                },
            },
            "loggers": {
                "uvicorn": {"handlers": ["default", "default_file"], "level": "INFO"},
                "uvicorn.error": {"level": "INFO"},
                "uvicorn.access": {"handlers": ["access", "access_file"], "level": "INFO", "propagate": False},
            },
        }
    
        uvicorn.run(app="fastapiweb222:app", host="127.0.0.1", port=8082, reload=True, debug=True,
                    log_config=LOGGING_CONFIG)

    控制台截图:

    文件日志截图:

  • 相关阅读:
    【JZOJ3743】【BZOJ5158】Alice and Bob
    【JZOJ3719】K-D-Sequence
    【JZOJ1913】【BZOJ2124】等差子序列
    【JZOJ1914】【BZOJ2125】最短路
    【luoguP4768】【NOI2018】归程
    【JZOJ6435】【luoguP5666】【CSP-S2019】树的重心
    【JZOJ6434】【luoguP5665】【CSP-S2019】划分
    【JZOJ6433】【luoguP5664】【CSP-S2019】Emiya 家今天的饭
    【JZOJ6431】【luoguP5658】【CSP-S2019】括号树
    【JZOJ3673】【luoguP4040】【BZOJ3874】宅男计划
  • 原文地址:https://www.cnblogs.com/ydf0509/p/16663158.html
Copyright © 2020-2023  润新知