Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

742
Vistas
Agregar el registro de Python a los puntos finales de FastApi, alojado en la ventana acoplable no muestra los registros de los puntos finales de la API

Tengo una aplicación fastapi en la que quiero agregar el registro de python. Seguí el tutorial básico y agregué esto, sin embargo, esto no agrega API sino solo registro de gunicorn.

Entonces, tengo un servidor local alojado usando docker build, así que ejecuto el servidor usando docker-compose up y pruebo mis puntos finales usando el cliente api (Insomnia, similar al cartero). A continuación se muestra el código donde no se crea ningún archivo de registro y, por lo tanto, no se agregan declaraciones de registro.

Mi proyecto str es el siguiente:

 project/ src/ api/ models/ users.py routers/ users.py main.py logging.conf
 """ main.py Main is the starting point for the app. """ import logging import logging.config from fastapi import FastAPI from msgpack_asgi import MessagePackMiddleware import uvicorn from api.routers import users logger = logging.getLogger(__name__) app = FastAPI(debug=True) app.include_router(users.router) @app.get("/check") async def check(): """Simple health check endpoint.""" logger.info("logging from the root logger") return {"success": True}

Además, estoy usando gunicorn.conf que se ve así:

 [program:gunicorn] command=poetry run gunicorn -c /etc/gunicorn/gunicorn.conf.py foodgame_api.main:app directory=/var/www/ autostart=true autorestart=true redirect_stderr=true

Y gunicorn.conf.py como

 import multiprocessing bind = "unix:/tmp/gunicorn.sock" workers = multiprocessing.cpu_count() * 2 + 1 worker_class = "uvicorn.workers.UvicornWorker" loglevel = "debug" errorlog = "-" capture_output = True chdir = "/var/www" reload = True reload_engine = "auto" accesslog = "-" access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"'

Este es mi terminal de salida para el punto final de la API anterior en la ventana acoplable:

ingrese la descripción de la imagen aquí

¿Podría alguien por favor guiarme aquí? Soy nuevo en FastApi, por lo que agradeceré algo de ayuda.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Inspirado en la respuesta de @ JPG pero usando un modelo pydantic parecía más limpio.

Es posible que desee exponer más variables. Esta configuración funcionó bien para mí.

 from pydantic import BaseModel class LogConfig(BaseModel): """Logging configuration to be set for the server""" LOGGER_NAME: str = "mycoolapp" LOG_FORMAT: str = "%(levelprefix)s | %(asctime)s | %(message)s" LOG_LEVEL: str = "DEBUG" # Logging config version = 1 disable_existing_loggers = False formatters = { "default": { "()": "uvicorn.logging.DefaultFormatter", "fmt": LOG_FORMAT, "datefmt": "%Y-%m-%d %H:%M:%S", }, } handlers = { "default": { "formatter": "default", "class": "logging.StreamHandler", "stream": "ext://sys.stderr", }, } loggers = { "mycoolapp": {"handlers": ["default"], "level": LOG_LEVEL}, }

Luego impórtalo a tu archivo main.py como:

 from logging.config import dictConfig import logging from .config import LogConfig dictConfig(LogConfig().dict()) logger = logging.getLogger("mycoolapp") logger.info("Dummy Info") logger.error("Dummy Error") logger.debug("Dummy Debug") logger.warning("Dummy Warning")

Lo que da:

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo Denunciar

0

Yo usaría la configuración de registro de dictado

cree una configuración de registrador como se muestra a continuación,

 # my_log_conf.py log_config = { "version": 1, "disable_existing_loggers": False, "formatters": { "default": { "()": "uvicorn.logging.DefaultFormatter", "fmt": "%(levelprefix)s %(asctime)s %(message)s", "datefmt": "%Y-%m-%d %H:%M:%S", }, }, "handlers": { "default": { "formatter": "default", "class": "logging.StreamHandler", "stream": "ext://sys.stderr", }, }, "loggers": { "foo-logger": {"handlers": ["default"], "level": "DEBUG"}, }, }

Luego, cargue la configuración usando la función dictConfig como,

 from logging.config import dictConfig from fastapi import FastAPI from some.where.my_log_conf import log_config dictConfig(log_config) app = FastAPI(debug=True)

Nota: Se recomienda llamar a la dictConfig(...) antes de la inicialización de FastAPI .

Después de la inicialización, puede usar el registrador llamado foo-logger en cualquier parte de su código como,

 import logging logger = logging.getLogger( 'foo-logger' ) logger.debug('This is test')
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda