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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章