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

 

posted @   小菠萝测试笔记  阅读(4865)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2020-11-13 Docker 实战(3)- 搭建 Gitlab 容器并上传本地项目代码
2020-11-13 Docker - 解决 gitlab 容器上的项目进行 clone 时,IP 地址显示一串数字而不是正常 IP 地址的问题
2020-11-13 Docker - 解决同步容器与主机时间报错:Error response from daemon: Error processing tar file(exit status 1): invalid symlink "/usr/share/zoneinfo/UTC" -> "../usr/share/zoneinfo/Asia/Shanghai"
2020-11-13 Docker - 解决容器内获取的时间和主机的时间不一样的问题
点击右上角即可分享
微信分享提示