fastapi- 修改 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
————————————————
版權聲明:本文為CSDN博主「小菠蘿測試筆記」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_33801641/article/details/121313494


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM