Lors du développement, il est fréquent d'avoir besoin d'afficher des informations pour faciliter le débogage. Cependant, utiliser trop de print() n'est pas idéal. Le module logging de Python offre une solution beaucoup plus élégante.
Le module logging propose deux types de gestionnaire (handler) principaux :
Le StreamHandler redirige les informations de journalisation vers la console. Le FileHandler écrit les informations dans un fichier. Ces gestionnaires peuvent être combinés pour une sortie multiple.
Effacer les données à chaque exécution
import logging
class GestionnaireJournaux:
def __init__(self, chemin_fichier):
self.chemin_fichier = chemin_fichier
self.journal = logging.getLogger("app_logger")
def configurer(self):
self.journal.setLevel(logging.INFO)
gestionnaire_fichier = logging.FileHandler(self.chemin_fichier)
gestionnaire_fichier.setLevel(logging.DEBUG)
format_journal = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
gestionnaire_fichier.setFormatter(format_journal)
self.journal.addHandler(gestionnaire_fichier)
return self.journal
def effacer_contenu(self):
with open(self.chemin_fichier, 'w') as fichier:
fichier.truncate()
Utilisation :
from testcode import utilJournal
fichier_sortie = 'journal.log'
journal = utilJournal.GestionnaireJournaux(fichier_sortie).configurer()
utilJournal.GestionnaireJournaux(fichier_sortie).effacer_contenu()
journal.debug('Message de débogage')
journal.info('Message d'information')
journal.warning('Avertissement')
journal.error('Erreur détectée')
journal.critical('Erreur critique')
Résultat :
Un fichier .log sera généré dans le répertoire courant.
Points importants :
- Il est recommandé de définir un niveau de journalisation approprié : NOTSET, DEBUG, INFO, WARNING, ERROR ou CRITICAL. Cela permet de contrôler la quantité d'informations affichées.
- Plusieurs gestionnaires peuvent être ajoutés simultanément pour rediriger les journaux vers différents endroits.
- Les chaînes de formatage peuvent être personnalisées selon les besoins.
Filtrage des messages :
class FiltreMotCle(logging.Filter):
def filter(self, enregistrement):
return 'erreur' in enregistrement.getMessage()
filtre_perso = FiltreMotCle()
gestionnaire_console.addFilter(filtre_perso)
Créer un fichier à chaque exécution
# -*- coding: utf-8 -*-
import logging
import time
class CreateurJournal:
def __init__(self, nom_logger):
self.journal = logging.getLogger(nom_logger)
self.journal.setLevel(logging.DEBUG)
horodatage = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
repertoire = '../journal/'
nom_fichier = repertoire + horodatage + '.log'
handler_fichier = logging.FileHandler(nom_fichier)
handler_fichier.setLevel(logging.INFO)
handler_console = logging.StreamHandler()
handler_console.setLevel(logging.INFO)
format_journal = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler_fichier.setFormatter(format_journal)
handler_console.setFormatter(format_journal)
self.journal.addHandler(handler_fichier)
self.journal.addHandler(handler_console)
def obtenir_journal(self):
return self.journal