Lancement / Blog / Python / Configuration du logging FastAPI - local et en production

Configuration du logging FastAPI - local et en production

Résumer avec ChatGPT

FastAPI est un fantastique Framework web pour la mise en place rapide de APIs avec Python. Mais parfois, la journalisation peut représenter un défi, surtout si l'on veut s'assurer qu'elle fonctionne correctement aussi bien localement avec Uvicorn qu'en production. Dans ce tutoriel, je vais te montrer comment configurer la journalisation FastAPI pour qu'elle fonctionne de manière fiable aussi bien localement que dans des environnements de production.

Préparation

Tout d'abord, nous avons besoin d'une application FastAPI standard. Créez un fichier nommé api.py et insère le code suivant :

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"}

Définition du problème

Lors de l'exécution locale de l'application avec Uvicorn, le logging ne s'affiche pas comme prévu :

uvicorn api:app --reload

Cela entraîne l'affichage des informations suivantes dans la console :

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.

Mais il manque les messages de démarrage que nous avons définis dans notre code.

Solution

Pour configurer correctement le Logging, nous devons nous assurer d'ajouter à la fois un StreamHandler et un FileHandler et de définir les niveaux de Log en conséquence.

Instructions pas à pas

1. configurer le logging

Crée ou modifie tes api.py comme suit :

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. utiliser Uvicorn-Logger

Nous pouvons également utiliser directement Uvicorn-Logger pour nous assurer que les messages du journal s'affichent correctement :

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. régler le niveau de log

Le niveau de log est déterminé par l'option de ligne de commande Uvicorn --log-level debug commandée :

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

Cela entraînera les dépenses suivantes :

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

4. environnement de production

Dans l'environnement de production, tu peux utiliser Uvicorn avec gunicorn combiner pour obtenir une solution plus robuste :

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

Conclusion

En ajoutant et en configurant les StreamHandlers et les FileHandlers, ainsi qu'en définissant correctement les niveaux de log, tu peux t'assurer que ton application FastAPI fonctionne à la fois localement et dans la Production soit correctement consigné. Cela facilite considérablement le débogage et le monitoring de ton application.

Bonne chance pour la mise en œuvre et happy coding !

Avez-vous trouvé cette page utile ?

Merci beaucoup pour vos commentaires !

Voulez-vous me donner un feedback ? (anonyme)

Nous développons des logiciels d'intelligence artificielle pour les entreprises et renonçons délibérément aux bannières publicitaires gênantes. Par le biais de nos articles, nous documentons des thèmes qui nous préoccupent, nous intéressent et financent également notre pain quotidien.

Comme nos contenus sont gratuits, vos commentaires sont nos félicitations.

Chaque auteur lit personnellement vos commentaires anonymes, même si les IA pourraient les automatiser, et intègre directement les suggestions constructives dans la prochaine révision ou les utilise comme source d'inspiration pour le prochain article.



    • Florian Zyprian
      (auteur)

      En tant que CTO chez Helm & Nagel GmbH, l'entreprise derrière la marque Konfuzio.

    fr_FRFR