les logs aident à diagnostiquer en dev et prod. un format cohérent accélère le support.
objectifs
- configurer
basicConfig - utiliser des niveaux (
DEBUG→ERROR) - écrire vers console et fichier
explication détaillée
logging.getLogger(name)par modulebasicConfig(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=Truesi utile
exercices
- logger console+fichier avec timestamps et nom du logger.
- capturer une exception, la logguer avec
exc_info=True. - ajouter un champ de contexte (ex:
user_id) à vos messages.