Retour au cours

logging : logs structurés de base

les logs aident à diagnostiquer en dev et prod. un format cohérent accélère le support.

objectifs

  • configurer basicConfig
  • utiliser des niveaux (DEBUGERROR)
  • écrire vers console et fichier

explication détaillée

  • logging.getLogger(name) par module
  • basicConfig(level, format) pour un setup rapide
  • handlers multiples (console, fichier) et formatters

exemples exécutables

import logging
logging.basicConfig(level=logging.INFO, format="%(levelname)s %(name)s %(message)s")
log = logging.getLogger("app")
log.info("bonjour")
log.warning("attention")
# sortie fichier + console
import logging
log = logging.getLogger("svc")
log.setLevel(logging.DEBUG)
fh = logging.FileHandler("app.log", encoding="utf-8")
ch = logging.StreamHandler()
fmt = logging.Formatter("%(asctime)s %(levelname)s %(name)s %(message)s")
fh.setFormatter(fmt); ch.setFormatter(fmt)
log.addHandler(fh); log.addHandler(ch)
log.debug("détails techniques")
log.error("erreur critique", exc_info=False)

bonnes pratiques

  • un logger par fichier (__name__)
  • messages actionnables, pas verbiage
  • pas de secrets dans les logs

pièges courants

  • handlers en double → messages dupliqués
  • niveau mal réglé (trop de DEBUG en prod)
  • ignorer les exceptions → utilisez exc_info=True si utile

exercices

  1. logger console+fichier avec timestamps et nom du logger.
  2. capturer une exception, la logguer avec exc_info=True.
  3. ajouter un champ de contexte (ex: user_id) à vos messages.