Formateur de journal Python

Aditya Raj 30 janvier 2023
  1. Quels sont les différents niveaux de journalisation en Python ?
  2. Qu’est-ce qu’un gestionnaire de journaux Python ?
  3. Qu’est-ce que le formateur de journal Python ?
  4. Étapes pour créer un formateur de journal Python
  5. Conclusion
Formateur de journal Python

Nous utilisons la journalisation pour stocker des informations sur l’exécution d’un programme. Lorsque le logiciel s’exécute, divers avertissements sont générés et parfois des erreurs se produisent. Les données stockées par la journalisation nous aident à identifier les causes de l’erreur. Cet article explique comment nous pouvons utiliser un formateur de journal en Python pour stocker les données du journal dans un format souhaitable.

Quels sont les différents niveaux de journalisation en Python ?

Le niveau de journalisation est utilisé pour identifier la gravité d’un avertissement ou d’un message dans un fichier journal. En Python, nous avons six niveaux de journalisation : critical, error, warning, info, debug et notset. Le niveau critique a la priorité la plus élevée parmi ceux-ci, tandis que le niveau non défini a la priorité la plus basse. Habituellement, lorsque nous créons des journaux dans un programme, les journaux sont imprimés sur la sortie standard. On peut imprimer un log error en utilisant la méthode error du module logging. Comme indiqué ci-dessous, la méthode error() prend un message de chaîne et l’imprime sur la sortie standard.

import logging

logging.error("This is a sample error message")

Production :

ERROR:root:This is a sample error message

De même, vous pouvez imprimer un journal avertissement en utilisant la méthode warning(), un journal debug en utilisant la méthode debug, un journal critique en utilisant la méthode critical() et un journal info en utilisant la méthode info() comme indiqué ci-dessous.

import logging

logging.debug("This is a sample debug message")
logging.info("This is a sample info message")
logging.warning("This is a sample warning message")
logging.error("This is a sample error message")
logging.critical("This is a sample critical message")

Production :

WARNING:root:This is a sample warning message
ERROR:root:This is a sample error message
CRITICAL:root:This is a sample critical message

Dans la sortie, root est le nom du logger actuel. On peut aussi définir des loggers en utilisant la méthode getLogger(). De plus, vous pouvez observer que seuls les journaux critique, erreur et avertissement sont imprimés tandis que le journal debug et le journal info ne sont pas imprimés.

Cela est dû au fait que le niveau de journalisation est défini au niveau avertissement. Tout journal en dessous du niveau avertissement, c’est-à-dire les journaux info et debug ne sera pas imprimé. Pour imprimer ces journaux, nous devrons définir le niveau de journalisation sur info. Pour cela, nous utilisons la méthode setLevel() définie dans le module logging.

La méthode setLevel() est invoquée sur un objet logger. L’objet logger est créé à l’aide de la méthode getLogger() définie dans le module logging. La méthode getLogger() prend une chaîne en entrée. La chaîne est attribuée comme nom de l’enregistreur. Après avoir défini le niveau de journalisation à un niveau défini, tous les journaux ayant une priorité supérieure à ce niveau seront imprimés. L’exemple suivant montre comment cela fonctionne.

import logging

logger = logging.getLogger("myLogger")
logger.setLevel(logging.CRITICAL)
logger.debug("This is a sample debug message")
logger.info("This is a sample info message")
logger.warning("This is a sample warning message")
logger.error("This is a sample error message")
logger.critical("This is a sample critical message")

Production :

This is a sample critical message

Ici, seul le journal critique est imprimé car nous avons défini le niveau de journalisation à critique. De plus, vous pouvez voir que seul le message est imprimé et non le type de journal et le mot-clé root. C’est parce que nous avons défini un logger personnalisé nommé myLogger à l’aide de la fonction getLogger(). Pour imprimer le type de journal et le nom de l’enregistreur, nous devons utiliser un formateur de journal python.

Qu’est-ce qu’un gestionnaire de journaux Python ?

Le simple fait d’imprimer un message dans le fichier journal ne nous donnera aucune information sur les erreurs. Nous devons donc formater les messages du journal pour obtenir les informations requises à partir des fichiers journaux. Pour cela, nous utilisons différents formateurs et gestionnaires de journaux.

Vous pouvez considérer les objets de gestionnaire comme des canaux pour envoyer des messages de journal à leur destination spécifique. Il existe différents types d’objets gestionnaires, tels que les objets FileHandler et StreamHandler. L’objet FileHandler est créé à l’aide de la méthode FileHandler. Comme indiqué ci-dessous, il prend un nom de fichier en entrée et renvoie un objet FileHandler.

fileHandler = logging.FileHandler("test_file.log")
logger.addHandler(fileHandler)

De même, un objet StreamHandler est créé à l’aide de la méthode StreamHandler. Alors que les objets FileHandler dirigent les journaux vers un fichier spécifique, l’objet StreamHandler dirige les journaux vers un flux spécifique. Lorsque nous ne transmettons aucun argument d’entrée à la méthode StreamHandler(), il dirige les journaux vers le flux de sortie standard. Vous pouvez créer un StreamHandler, comme indiqué ci-dessous.

streamHandler = logging.StreamHandler()
logger.addHandler(streamHandler)

Après avoir créé un objet gestionnaire, nous ajoutons le gestionnaire au logger en utilisant la méthode addHandler(). La méthode addHandler() est invoquée sur un objet logger, et elle prend un objet gestionnaire comme argument d’entrée. Après exécution de la méthode addHandler(), le gestionnaire est ajouté au logger.

Qu’est-ce que le formateur de journal Python ?

Un formateur de journal en Python est utilisé pour configurer la structure finale et le contenu des journaux. À l’aide d’un formateur de journal python, nous pouvons inclure le name, time, date, severity, et d’autres informations avec le message de journal à l’aide de l’opérateur %.

Pour définir le format d’un log, on utilise la méthode Formatter(). La méthode Formatter() prend une chaîne contenant différents attributs tels que asctime, name, levelname, etc. comme argument d’entrée. Après exécution, la méthode Formatter() renvoie un objet Formatter.

formatter = logging.Formatter("%(asctime)s  %(name)s  %(levelname)s: %(message)s")

Ici,

  • L’attribut asctime indique l’heure à laquelle l’enregistrement de journal est créé.
  • L’attribut name indique le nom du logger utilisé pour enregistrer l’appel.
  • L’attribut levelname indique le niveau de journalisation du message, tel que débogage, info, avertissement, erreur ou critique. Vous pouvez en savoir plus sur les autres attributs de journal ici.

Après avoir créé un objet Formatter, nous définissons le format du journal à l’aide de la méthode setFormatter(). La méthode setFormatter() est invoquée sur un objet gestionnaire. Nous avons utilisé un StreamHandler pour imprimer les journaux sur la sortie standard de notre programme. Lorsqu’elle est invoquée sur un objet gestionnaire, la fonction setFormatter() prend un objet Formatter comme argument d’entrée et définit le format du journal dans le gestionnaire.

streamHandler.setFormatter(formatter)

Après avoir défini le format des messages de journalisation, vous pouvez enregistrer les messages comme vous le faites normalement, et ils seront envoyés au flux de sortie dans le format défini.

import logging

logger = logging.getLogger("myLogger")
streamHandler = logging.StreamHandler()
logger.addHandler(streamHandler)
formatter = logging.Formatter("%(asctime)s  %(name)s  %(levelname)s: %(message)s")
streamHandler.setFormatter(formatter)
logger.debug("This is a sample debug message")
logger.info("This is a sample info message")
logger.warning("This is a sample warning message")
logger.error("This is a sample error message")
logger.critical("This is a sample critical message")

Production :

2021-12-28 02:33:42,933  myLogger  WARNING: This is a sample warning message
2021-12-28 02:33:42,933  myLogger  ERROR: This is a sample error message
2021-12-28 02:33:42,933  myLogger  CRITICAL: This is a sample critical message

Ici, vous pouvez voir que nous n’avons enregistré le message qu’en utilisant la méthode warning(). Le journal a été imprimé dans le format que nous avons défini à l’aide de la méthode Formatter(). Il contient tous les détails sur le journal, comme la date et l’heure de création du journal, le nom de l’enregistreur et le type de journal. Maintenant que nous avons appris l’ensemble du processus en morceaux, j’ai mentionné le processus étape par étape pour créer un formateur de journal python pour formater les sorties de journal ci-dessous.

Étapes pour créer un formateur de journal Python

  • Créez un objet logger en utilisant la méthode getLogger().
  • Créez un objet FileHandler ou StreamHandler en utilisant la méthode FileHandler() ou la méthode StreamHandler().
  • Ajouter l’objet FileHandler ou StreamHandler au logger en utilisant la méthode addHandler().
  • Créer un Log Formatter python en utilisant la méthode Formatter().
  • Appliquer le formateur à l’aide de la méthode setFormatter() sur l’objet FileHandler ou StreamHandler.

Conclusion

Dans cet article, nous avons expliqué comment fonctionne la journalisation en Python. Nous avons également discuté des gestionnaires et des formateurs de journaux en Python. Dans cet article, nous avons utilisé l’objet StreamHandler et le formateur de journal pour démontrer le fonctionnement du formatage. Cependant, vous devez toujours utiliser l’objet FileHandler pour créer des journaux, car nous devons toujours stocker les journaux dans des fichiers à examiner pour détecter les erreurs si quelque chose d’inattendu se produit. En outre, vous pouvez utiliser de nombreux autres attributs de journal donnés dans cet article pour formater les messages de journal pour une meilleure compréhension.

Auteur: Aditya Raj
Aditya Raj avatar Aditya Raj avatar

Aditya Raj is a highly skilled technical professional with a background in IT and business, holding an Integrated B.Tech (IT) and MBA (IT) from the Indian Institute of Information Technology Allahabad. With a solid foundation in data analytics, programming languages (C, Java, Python), and software environments, Aditya has excelled in various roles. He has significant experience as a Technical Content Writer for Python on multiple platforms and has interned in data analytics at Apollo Clinics. His projects demonstrate a keen interest in cutting-edge technology and problem-solving, showcasing his proficiency in areas like data mining and software development. Aditya's achievements include securing a top position in a project demonstration competition and gaining certifications in Python, SQL, and digital marketing fundamentals.

GitHub

Article connexe - Python Logging