Journaliser le message dans le fichier et la console en Python
-
Utilisez le module
logging
pour imprimer le message de journal dans un fichier et une console en Python -
Utilisez le module
logging
pour imprimer le message de journal sur la console en Python -
Utilisez le module
logging
pour imprimer un message de journal dans un fichier en Python
Ce didacticiel présentera quelques méthodes pour consigner les chaînes de débogage dans un fichier et une console en Python.
Utilisez le module logging
pour imprimer le message de journal dans un fichier et une console en Python
La journalisation est le processus de conservation des enregistrements de divers événements se produisant dans un système. Ces événements peuvent être des données d’entrée, des processus, des threads, des données de sortie, des informations traitées, des erreurs, des avertissements, des avis. Les différents événements sont suivis et stockés dans un fichier journal. Le module logging
est fourni par Python qui permet aux programmeurs d’enregistrer les différents événements survenus. Le module a des classes et des méthodes spécifiques. Loggers
, Handlers
, Filters
et Formatters
sont les classes de base que le module logging
définit.
La méthode basicConfig()
effectue la configuration de base. Il crée un StreamHandler
en utilisant un Formatter
par défaut. Ensuite, il ajoute à l’enregistreur racine. Les niveaux de journalisation sont représentés en valeurs numériques. Il existe six niveaux de journalisation : CRITICAL
, ERROR
, WARNING
, INFO
, DEBUG
and NOTSET
. Nous avons défini le niveau de journalisation sur INFO
ci-dessous. Ainsi, INFO
, WARNING
, ERROR
et CRITICAL
sont affichés ou enregistrés.
Pour écrire dans la console et le fichier, nous utiliserons logging.basicConfig()
, qui peut prendre des gestionnaires d’arguments et simplifier considérablement la configuration de la journalisation, en particulier lors de la configuration de plusieurs gestionnaires avec le même formateur. Nous utilisons la méthode FileHandler()
pour écrire dans un fichier et utilisons debug.log
pour enregistrer toutes les informations. De même, pour écrire dans une console, on utilise StreamHandler()
. Par défaut, StreamHandler()
écrit dans stderr. Pour écrire sur stdout, nous importons le module sys
et passons sys.stdout
explicitement à StreamHandler()
.
Dans l’exemple ci-dessous, les logs sont imprimés dans la console et le fichier debug.log
.
# python 3.x
import logging
import sys
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(message)s",
handlers=[logging.FileHandler("debug.log"), logging.StreamHandler(sys.stdout)],
)
logging.debug("This message is skipped as a level is set as INFO")
logging.info("So should this")
logging.warning("And this, too")
logging.error("Testing non-ASCII character, Ø and ö")
Production:
2021-07-28 14:50:01,348 [INFO] So should this
2021-07-28 14:50:01,349 [WARNING] And this, too
2021-07-28 14:50:01,349 [ERROR] Testing non-ASCII character, Ø and ö
Utilisez le module logging
pour imprimer le message de journal sur la console en Python
Pour utiliser la journalisation et mettre en place la configuration de base, nous utilisons logging.basicConfig()
. Ensuite, au lieu de print()
, nous appelons logging.{level}(message)
pour afficher le message dans la console. Puisque nous avons configuré le niveau comme INFO dans le paramètre basicConfig()
, nous avons appelé logging.info()
plus tard dans le programme. Et tout le message de la chaîne est transmis à logging.info()
, qui est ensuite affiché sur la console.
Exemple de code :
# python 3.x
import logging
logging.basicConfig(level=logging.INFO)
def area(l, b):
"""Compute the area of a rectangle"""
return l * b
logging.info(
"Area of length: {l} and breadth: {b} is {c}".format(l=3, b=4, c=area(l=3, b=4))
)
Production:
INFO:root:Area of length: 3 and breadth: 4 is 12
Utilisez le module logging
pour imprimer un message de journal dans un fichier en Python
Si nous utilisons plusieurs modules dans un programme, l’utilisation du module racine a de sérieuses limitations. C’est pourquoi nous devons créer un nouveau logger en utilisant la méthode logger.getLogger(name)
.
Il existe une convention pour utiliser la variable __name__
comme nom de l’enregistreur. Une fois que nous avons créé un nouvel enregistreur, nous devons nous rappeler de consigner tous nos messages en utilisant le nouveau logger.info()
au lieu de la méthode logging.info()
de la racine. Un FileHandler()
est utilisé pour que notre enregistreur personnalisé se connecte à un fichier différent. Ici, nous avons enregistré nos informations dans logfile.log
. De même, un Formatter()
est utilisé pour changer le format de nos messages enregistrés. Et le Formatter
est défini sur l’objet FileHandler()
et non directement sur le logger.
Par exemple, utilisez getLogger()
pour créer ou obtenir un enregistreur. Ensuite, utilisez la méthode setLogger()
pour définir le niveau de journalisation. Réglez le niveau sur logging.WARNING
. Ensuite, utilisez la méthode FileHandler()
pour définir le gestionnaire et la méthode Formatter()
pour définir le formateur. Ensuite, utilisez la méthode addHandler()
pour ajouter le gestionnaire au logger. Enfin, écrivez quelques messages à tester. On peut voir les logs dans le fichier log_file.log
.
Exemple de code :
# python 3.x
import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.WARNING)
handler = logging.FileHandler("log_file.log")
formatter = logging.Formatter(
"%(asctime)s : %(name)s : %(funcName)s : %(levelname)s : %(message)s"
)
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.debug("A debug message")
logger.info("An info message")
logger.warning("There is something wrong")
logger.error("An error has happened.")
logger.critical("Fatal error occured. Cannot continue")
Production:
2021-07-30 11:55:31,047 : __main__ : <module> : WARNING : There is something wrong
2021-07-30 11:55:31,047 : __main__ : <module> : ERROR : An error has happened.
2021-07-30 11:55:31,047 : __main__ : <module> : CRITICAL : Fatal error occured. Cannot continue