Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

744
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!