zoukankan      html  css  js  c++  java
  • fastapi(66) 修改 uvicorn 的日志格式

    背景

    默认启动 uvicorn 之后,访问接口会有打印日志,如下

    但我觉得这个日志满足不了我,我想加内容,比如时间戳,那要怎么操作捏

    首先打断点 debug 走起

    F7 进到内部

    ctrl + 点击 Config,然后往下看有一个 log_config

    ctrl + 点击 LOGGIN_CONFIG

    就能找到当前的 access_log 的打印格式了

    改源码

    "fmt": '%(asctime)s - %(levelprefix)s %(client_addr)s - "%(request_line)s" %(status_code)s',

    将上面的格式换成这个就可以打印有时间戳的日志啦

    但改源码只是临时手段,总不能部署一个环境改一次源码吧,所以要通过更灵活的方式来解决这个问题

    查阅官方文档

    http://www.uvicorn.org/settings/#logging

    uvicorn 提供了一个参数  --log-config <path> 可以自行提供日志配置文件

    从源码也能看到,可以支持 .ini .json .yaml  三种格式的日志配置文件

    通过 --log-config 修改 uvicorn 的日志格式

    先创建一个 uvicorn_config.json

    具体什么命名,什么格式自己决定即可

    {
      "version": 1,
      "disable_existing_loggers": false,
      "formatters": {
        "default": {
          "()": "uvicorn.logging.DefaultFormatter",
          "fmt": "%(levelprefix)s %(message)s",
          "use_colors": null
        },
        "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"
        },
        "access": {
          "formatter": "access",
          "class": "logging.StreamHandler",
          "stream": "ext://sys.stdout"
        }
      },
      "loggers": {
        "uvicorn": {
          "handlers": [
            "default"
          ],
          "level": "INFO"
        },
        "uvicorn.error": {
          "level": "INFO"
        },
        "uvicorn.access": {
          "handlers": [
            "access"
          ],
          "level": "INFO",
          "propagate": false
        }
      }
    }

    方式一:通过 uvicorn.run() 运行

    if __name__ == "__main__":
        uvicorn.run("test:app", port=8001, debug=True, log_config="uvicorn_config.json")

    方式二:通过 uvicorn 命令行运行

    uvicorn test:app --port 8001 --debug --log-config uvicorn_config.json

    两种方式都能给日志添加上了时间戳啦

    扩展:logging 模块的格式字符串

    像上面我加了  %(asctime)s 是 logging 模块自带的格式字符串来的,类似的还有很多,具体可看

    https://www.cnblogs.com/poloyy/p/15549265.html

  • 相关阅读:
    java xpath
    structs2 Interceptor
    jetbrains idea web help
    Java xpath example code THE RIGHT WAY
    java xpath engine
    本地安装jruby到maven仓库,由于公司网络不给力
    skybe的linux下的版本下载
    mybastis学 rails有migration了
    Using Java from Ruby with JRuby IRB
    PropertyPlaceholderConfigurer
  • 原文地址:https://www.cnblogs.com/poloyy/p/15549275.html
Copyright © 2011-2022 走看看