Python - Logging (Français)

Bonjour à tous les programmeurs Python en herbe !aujourd'hui, nous allons plonger dans le monde fascinant du logging en Python. En tant que professeur de informatique de votre quartier, je suis excité de vous guider à travers ce voyage. Croissez-moi, à la fin de ce tutoriel, vous serez des pros du logging !

Python - Logging

Logging en Python

Imaginez que vous êtes un détective essayant de résoudre un mystère. Vous aimeriez garder la trace de toutes les indices que vous trouvez, non ? Eh bien, c'est exactement ce que fait le logging dans la programmation ! Il nous aide à suivre ce qui se passe dans notre code lors de son exécution.

Python est livré avec un module intégré logging qui rend ce processus un jeu d'enfant. C'est comme avoir un carnet de notes de confiance qui note automatiquement les informations importantes pour vous.

Avantages du Logging

Maintenant, vous pourriez vous demander, "Pourquoi s'embêter avec le logging quand je peux simplement utiliser des instructions d'affichage ?" Bonne question ! Permettez-moi de partager une petite histoire de mes débuts en codage.

J'ai passé des heures à déboguer un programme à l'aide d'instructions d'affichage. C'était comme chercher une aiguille dans une botte de foin ! C'est alors que j'ai découvert la magie du logging. Voici quelques avantages :

  1. Flexibilité : Contrairement aux instructions d'affichage, les logs peuvent être facilement activés ou désactivés sans modifier le code.
  2. Niveaux de sévérité : Vous pouvez catégoriser vos logs en fonction de leur importance.
  3. Contrôle de la sortie : Les logs peuvent être dirigés vers des fichiers, la console ou même des serveurs distants !
  4. Performance : Le logging a un impact moindre sur les performances par rapport aux instructions d'affichage.

Composants du Logging en Python

Décomposons les composants principaux du logging en Python :

  1. Loggers : Ce sont les points d'entrée dans le système de logging.
  2. Handlers : Ils envoient les enregistrements de log vers le destinataire approprié.
  3. Formateurs : Ils spécifient la mise en page des enregistrements de log dans la sortie finale.
  4. Filtres : Ils fournissent un contrôle supplémentaire sur les enregistrements de log à afficher.

Pensez-y comme une ligne de production dans une usine. Le logger est l'ouvrier qui repère les problèmes, le handler décide où envoyer le rapport, le formateur décide comment le rapport doit être affiché, et le filtre décide quels rapports sont suffisamment importants pour être transmis.

Niveaux de Logging

Le logging en Python comprend cinq niveaux de sévérité standard. Regardons-les dans un tableau pratique :

Niveau Valeur numérique Description
DEBUG 10 Informations détaillées, généralement intéressantes uniquement pour le diagnostic de problèmes.
INFO 20 Confirmation que les choses fonctionnent comme prévu.
AVERTISSEMENT 30 Indication qu'il s'est produit quelque chose d'innatendu, ou signe d'un problème à venir.
ERREUR 40 À cause d'un problème plus grave, le logiciel n'a pas pu exécuter certaines fonctions.
CRITIQUE 50 Erreur grave, indiquant que le programme lui-même pourrait être incapable de continuer à fonctionner.

Exemple de Logging de Base

Commençons par un exemple simple pour nous initier :

import logging

# Configure le logging de base
logging.basicConfig(level=logging.INFO)

# Créer un logger
logger = logging.getLogger(__name__)

# Enregistrer des messages
logger.debug("Ceci est un message de débogage")
logger.info("Ceci est un message d'information")
logger.warning("Ceci est un message d'avertissement")
logger.error("Ceci est un message d'erreur")
logger.critical("Ceci est un message critique")

Si vous exécutez ce code, vous verrez une sortie similaire à ceci :

INFO:__main__:Ceci est un message d'information
AVERTISSEMENT:__main__:Ceci est un message d'avertissement
ERREUR:__main__:Ceci est un message d'erreur
CRITIQUE:__main__:Ceci est un message critique

Notez comment le message DEBUG n'apparaît pas ? C'est parce que nous avons configuré le niveau de configuration de base à INFO. Rien en dessous de INFO (comme DEBUG) ne sera enregistré à moins que nous modifions la configuration.

Configuration du Logging

Maintenant, faisons un peu plus sophistiqué avec notre configuration de logging :

import logging

# Configurer le logging
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
filename='app.log'
)

logger = logging.getLogger(__name__)

logger.debug("Message de débogage")
logger.info("Message d'information")
logger.warning("Message d'avertissement")
logger.error("Message d'erreur")
logger.critical("Message critique")

Dans cet exemple, nous avons :

  1. Défini le niveau de logging à DEBUG
  2. Spécifié un format pour nos messages de log
  3. Dirigé la sortie vers un fichier nommé 'app.log'

Si vous vérifiez le fichier 'app.log', vous verrez des messages de log bien formatés avec des horodatages !

Handlers de Logging

Les Handlers sont comme la poste du monde du logging. Ils déterminent où vos messages de log se retrouvent. Regardons un exemple utilisant plusieurs handlers :

import logging

# Créer un logger
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

# Créer des handlers
c_handler = logging.StreamHandler()  # Handler de console
f_handler = logging.FileHandler('file.log')  # Handler de fichier
c_handler.setLevel(logging.WARNING)
f_handler.setLevel(logging.ERROR)

# Créer des formateurs et les ajouter aux handlers
c_format = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
f_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
c_handler.setFormatter(c_format)
f_handler.setFormatter(f_format)

# Ajouter des handlers au logger
logger.addHandler(c_handler)
logger.addHandler(f_handler)

# Tester le logger
logger.debug('Ceci est un message de débogage')
logger.info('Ceci est un message d\'information')
logger.warning('Ceci est un message d\'avertissement')
logger.error('Ceci est un message d\'erreur')
logger.critical('Ceci est un message critique')

Dans cet exemple, nous avons configuré deux handlers :

  1. Un StreamHandler qui affiche les AVERTISSEMENTS et au-dessus à la console
  2. Un FileHandler qui enregistre les ERREURS et au-dessus dans un fichier

Exécutez ce code, et vous verrez les AVERTISSEMENTS et au-dessus dans votre console, tandis que seuls les messages ERREUR et CRITIQUE sont enregistrés dans le fichier.

Et voilà, les amis ! Vous avez juste pris vos premiers pas dans le monde du logging en Python. souvenez-vous, la pratique fait le maître. Essayez de jouer avec différentes configurations et voyez ce qui fonctionne le mieux pour vos projets.

Bon logging, et que votre code soit toujours exempt de bugs !

Credits: Image by storyset