[英]How to add timestamp to each request in uvicorn logs?
當我使用 uvicorn 運行我的 FastAPI 服務器時:
uvicorn main:app --host 0.0.0.0 --port 8000 --log-level info
運行服務器后我得到的日志:
INFO: Started server process [405098]
INFO: Waiting for application startup.
INFO: Connect to database...
INFO: Successfully connected to the database!
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
INFO: 122.179.31.158:54604 - "GET /api/hello_world?num1=5&num2=10 HTTP/1.1" 200 OK
如何獲取時間戳以及請求記錄? 喜歡:
INFO: "2020-07-16:23:34:78" - 122.179.31.158:54604 - "GET /api/hello_world?num1=5&num2=10 HTTP/1.1" 200 OK
您可以在主應用程序中創建一個dict 記錄器配置並使用dictConfig
function 對其進行初始化。
#main.py
from logging.config import dictConfig from config import log_config
from fastapi import FastAPI
dictConfig(log_config.sample_logger)
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
#config/log_config.py
sample_logger = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"access": {
"()": "uvicorn.logging.AccessFormatter",
"fmt": '%(levelprefix)s %(asctime)s :: %(client_addr)s - "%(request_line)s" %(status_code)s',
"use_colors": True
},
},
"handlers": {
"access": {
"formatter": "access",
"class": "logging.StreamHandler",
"stream": "ext://sys.stdout",
},
},
"loggers": {
"uvicorn.access": {
"handlers": ["access"],
"level": "INFO",
"propagate": False
},
},
}
你可以使用 Uvicorn 的LOGGING_CONFIG
import uvicorn
from uvicorn.config import LOGGING_CONFIG
from fastapi import FastAPI
app = FastAPI()
def run():
LOGGING_CONFIG["formatters"]["default"]["fmt"] = "%(asctime)s [%(name)s] %(levelprefix)s %(message)s"
uvicorn.run(app)
if __name__ == '__main__':
run()
這將返回帶有時間戳的 uvicorn 日志
2020-08-20 02:33:53,765 [uvicorn.error] INFO: Started server process [107131]
2020-08-20 02:33:53,765 [uvicorn.error] INFO: Waiting for application startup.
2020-08-20 02:33:53,765 [uvicorn.error] INFO: Application startup complete.
2020-08-20 02:33:53,767 [uvicorn.error] INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
能夠通過不使用 uvicorn 命令從終端運行服務器來實現相同的目的。 但是通過使用運行 uvicorn package 的 function 運行服務器。
在瀏覽 web 以獲得解決方案時,我最終解決了這個問題, Dylan Anthony使用運行 function of uvicorn ZEFE90A8E604A7C840E88D03A67ZF6 編寫了解決方案。
雖然,知道如何使用 uvicorn 命令實現同樣的效果仍然很好。
結合@Yagiz Degirmenci 和@HappyFace 的答案,我得到了這段代碼。
LOGGING_CONFIG["formatters"]["default"]["fmt"] = "%(asctime)s [%(name)s] %(levelprefix)s %(message)s"
LOGGING_CONFIG["formatters"]["access"][
"fmt"] = '%(asctime)s [%(name)s] %(levelprefix)s %(client_addr)s - "%(request_line)s" %(status_code)s'
日志是這樣的:
2021-03-31 18:38:22,728 [uvicorn.error] INFO: Started server process [21824]
2021-03-31 18:38:22,729 [uvicorn.error] INFO: Waiting for application startup.
2021-03-31 18:38:22,729 [uvicorn.error] INFO: Application startup complete.
2021-03-31 18:38:22,729 [uvicorn.error] INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
2021-03-31 18:38:26,359 [uvicorn.access] INFO: 127.0.0.1:51932 - "POST /limit HTTP/1.1" 200 OK
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.