Formateur de journal Python
- Quels sont les différents niveaux de journalisation en Python ?
- Qu’est-ce qu’un gestionnaire de journaux Python ?
- Qu’est-ce que le formateur de journal Python ?
- Étapes pour créer un formateur de journal Python
- Conclusion
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
ouStreamHandler
en utilisant la méthodeFileHandler()
ou la méthodeStreamHandler()
. -
Ajouter l’objet
FileHandler
ouStreamHandler
au logger en utilisant la méthodeaddHandler()
. -
Créer un Log Formatter python en utilisant la méthode
Formatter()
. -
Appliquer le formateur à l’aide de la méthode
setFormatter()
sur l’objetFileHandler
ouStreamHandler
.
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.
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