Journaliser le message dans le fichier et la console en Python

Subodh Adhikari 10 octobre 2023
  1. Utilisez le module logging pour imprimer le message de journal dans un fichier et une console en Python
  2. Utilisez le module logging pour imprimer le message de journal sur la console en Python
  3. Utilisez le module logging pour imprimer un message de journal dans un fichier en Python
Journaliser le message dans le fichier et la console 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

Article connexe - Python Logging