背景
默认启动 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
————————————————
版权声明:本文为CSDN博主「小菠萝测试笔记」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_33801641/article/details/121313494
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!