Cuando ejecuto mi servidor FastAPI usando uvicorn:
uvicorn main:app --host 0.0.0.0 --port 8000 --log-level infoEl registro que obtengo después de ejecutar el servidor:
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¿Cómo obtengo la marca de tiempo junto con el registro de la solicitud? Me gusta:
INFO: "2020-07-16:23:34:78" - 122.179.31.158:54604 - "GET /api/hello_world?num1=5&num2=10 HTTP/1.1" 200 OKPuedes usar LOGGING_CONFIG de 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()Que devolverá el registro de uvicornio con la marca de tiempo
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)Puede crear una configuración de registrador de dictados e inicializarla usando la función dictConfig en su aplicación principal.
#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 }, }, }Combinando las respuestas de @Yagiz Degirmenci y @HappyFace, obtuve este código.
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'El registro le gusta esto:
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