fastapi(66)- 修改 uvicorn 的日志格式

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: fastapi(66)- 修改 uvicorn 的日志格式

背景


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

image.png

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

 

首先打断点 debug 走起


image.png

ctrl + 点击 LOGGIN_CONFIG


image.png

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

 

改源码


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

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

image.png

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

 

查阅官方文档


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

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

image.png

从源码也能看到,可以支持 .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")

image.png

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

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

image.png

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

 

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

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

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

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
JSON 应用服务中间件 nginx
如何修改kong网关access.log的日志格式
有需要需要调整kong网关的日志格式,调整日志输出内容,由于原来使用docker部署kong网关,并且使用了环境变量指定了网关运行的参数,这里在以下介绍的方式还需要修改容器的环境变量,但是也提供了一条思路,就是部署网关的时候,统一使用kong.conf进行配置
637 0
|
应用服务中间件 nginx
Nginx日志格式不生效
Nginx日志格式不生效
|
3月前
|
Docker Python Windows
pycharm使用fastapi/uvicorn无法reload的问题
这篇文章讨论了在PyCharm中使用FastAPI和uvicorn时遇到的无法快速重载的问题,并提供了包括降级uvicorn版本和使用命令行运行等解决方法。
pycharm使用fastapi/uvicorn无法reload的问题
|
3月前
分享一种接口的日志格式
分享一种接口的日志格式
52 13
|
3月前
|
存储 JSON 监控
FastAPI日志之谜:如何揭开Web应用监控与调试的面纱?
【8月更文挑战第31天】在现代Web开发中,日志记录对于监控应用状态、诊断问题和了解用户行为至关重要。FastAPI框架提供了强大的日志功能,使开发者能轻松集成日志记录。本文将详细介绍如何在FastAPI中设置和利用日志,包括基础配置、请求响应日志、错误处理和结构化日志等内容,帮助提升应用的可维护性和性能。
145 0
|
5月前
|
C++
spdlog 日志库部分源码说明——日志格式设定,DIY你自己喜欢的调试信息,你能调试的远比你想象的还要丰富
spdlog 日志库部分源码说明——日志格式设定,DIY你自己喜欢的调试信息,你能调试的远比你想象的还要丰富
308 6
|
4月前
|
存储 弹性计算 运维
可观测性体系问题之Process Layer在ECS稳定性平台中的工作如何解决
可观测性体系问题之Process Layer在ECS稳定性平台中的工作如何解决
42 0
|
4月前
|
监控 存储
日志存储问题之志格式的乱象如何解决
日志存储问题之志格式的乱象如何解决
|
4月前
|
JSON 应用服务中间件 开发工具
Ngnix的http块自定义服务日志,access.log和error.log,log_format指定日志输出格式设置
Ngnix的http块自定义服务日志,access.log和error.log,log_format指定日志输出格式设置
|
6月前
|
SQL 存储 Java
实时计算 Flink版产品使用合集之怎么配置日志的输出格式和文件大小
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
下一篇
无影云桌面