Inicio / Blog / Python / Configuración del registro FastAPI - localmente y en producción

Configuración del registro FastAPI - localmente y en producción

Resumir con ChatGPT

FastAPI es un fantástico Marco web para la construcción rápida de APIs con Python. Pero a veces el registro puede ser un reto, especialmente si quieres asegurarte de que funciona correctamente tanto localmente con Uvicorn como en producción. En este tutorial, te mostraré cómo configurar el registro FastAPI para que funcione de forma fiable tanto a nivel local como en entornos de producción.

Preparación

En primer lugar, necesitamos una aplicación FastAPI estándar. Cree un archivo llamado api.py e inserte el siguiente código:

from fastapi import FastAPI
import logging
import uvicorn

app = FastAPI(title="api")

LOG = logging.getLogger(__name__)
LOG.info("API is starting up")
LOG.info(uvicorn.Config.asgi_version)

@app.get("/")
async def get_index():
LOG.info("GET /")
return {"Hello": "Api"}

Definición del problema

Al ejecutar la aplicación localmente con Uvicorn, el registro no se muestra como se esperaba:

uvicorn api:app --reload

Esto conduce a la siguiente información en la consola:

INFO:     Will watch for changes in these directories: ['/Users/user/code/backend/api']
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [44258] using StatReload
INFO: Started server process [44260]
INFO: Waiting for application startup.
INFO: Application startup complete.

Pero faltan los mensajes de inicio que hemos definido en nuestro código.

Solución

Para configurar el registro correctamente, tenemos que asegurarnos de que añadimos tanto un StreamHandler como un FileHandler y establecer los niveles de registro en consecuencia.

Instrucciones paso a paso

1. configurar el registro

Cree o modifique su api.py como sigue:

from fastapi import FastAPI
import logging
import sys

app = FastAPI(title='api')

logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

# StreamHandler für die Konsole
stream_handler = logging.StreamHandler(sys.stdout)
log_formatter = logging.Formatter("%(asctime)s [%(processName)s: %(process)d] [%(threadName)s: %(thread)d] [%(levelname)s] %(name)s: %(message)s")
stream_handler.setFormatter(log_formatter)
logger.addHandler(stream_handler)

logger.info('API is starting up')

@app.get('/')
async def main():
logger.info('GET /')
return 'ok'

2. utilizar el registrador Uvicorn

También podemos utilizar directamente el registrador Uvicorn para asegurarnos de que los mensajes de registro se muestran correctamente:

import logging
from fastapi import FastAPI

app = FastAPI(title='api')

logger = logging.getLogger('uvicorn.error')

@app.get('/')
async def main():
logger.debug('this is a debug message')
return 'ok'

3. establecer nivel de registro

El nivel de registro se establece mediante la opción de línea de comandos de Uvicorn --log-level debug controlada:

uvicorn api:app --reload --log-level debug

Esto conllevará los siguientes gastos:

INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
DEBUG: this is a debug message

4. entorno de producción

En el entorno de producción, puede utilizar Uvicorn con gunicorn para crear una solución más sólida:

gunicorn -k uvicorn.workers.UvicornWorker api:app --log-level debug

Conclusión

Añadiendo y configurando StreamHandlers y FileHandlers y estableciendo el nivel de registro correctamente, puede asegurarse de que su aplicación FastAPI es segura tanto localmente como en el servidor Producción se registra correctamente. Esto hace que la depuración y el seguimiento de su aplicación sea mucho más fácil.

Buena suerte con la implementación y ¡feliz codificación!

¿Le ha resultado útil esta página?

Gracias por sus comentarios.

¿Podría darme su opinión? (anónimo)

Desarrollamos software de inteligencia artificial para empresas y evitamos deliberadamente los molestos banners publicitarios. A través de nuestros artículos, documentamos temas que nos ocupan e interesan y también financian nuestro pan de cada día.

Como nuestro contenido es gratuito, sus comentarios son nuestro elogio.

Cada autor lee personalmente tus comentarios anónimos, aunque la IA podría automatizarlos, e integra las sugerencias constructivas directamente en la siguiente revisión o las utiliza como inspiración para el siguiente artículo.



    </artículo
    • Florian Zyprian
      (Autor)

      Como Director Técnico de Helm & Nagel GmbH, la empresa que está detrás del Konfuzio.

    es_ESES