Le logging, ou enregistrement en français, est une fonctionnalité essentielle dans le développement logiciel, y compris dans le langage de programmation Python. En utilisant le module intégré logging
, les développeurs peuvent enregistrer des messages, des avertissements, des erreurs et d’autres informations pertinentes lors de l’exécution d’un programme Python. Cette fonctionnalité est extrêmement utile pour le débogage, la surveillance et le suivi des activités d’une application. Explorons en détail comment utiliser le logging en Python 3.
Configuration du système de journalisation
La première étape pour utiliser le module logging
consiste à configurer le système de journalisation. Cette configuration peut être faite de différentes manières, mais la méthode la plus courante consiste à définir les options de configuration, telles que le format des messages, le niveau de gravité minimum à enregistrer, et les cibles de sortie, dans le code ou via un fichier de configuration externe.

La solution définitive pour raccourcir les liens et gérer vos campagnes digitales de manière professionnelle.
• Raccourcissement instantané et rapide des liens
• Pages de profil interactives
• Codes QR professionnels
• Analyses détaillées de vos performances digitales
• Et bien plus de fonctionnalités gratuites !
Configuration via le code
Voici un exemple de configuration basique du système de journalisation directement dans le code Python :
pythonimport logging
# Configuration du niveau de journalisation et du format des messages
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
# Exemple d'utilisation de la journalisation
logging.debug('Ceci est un message de débogage')
logging.info('Ceci est un message informatif')
logging.warning('Ceci est un message d\'avertissement')
logging.error('Ceci est un message d\'erreur')
logging.critical('Ceci est un message critique')
Dans cet exemple, nous avons configuré le niveau de journalisation sur DEBUG, ce qui signifie que tous les messages ayant un niveau de gravité égal ou supérieur à DEBUG seront enregistrés. Nous avons également spécifié un format pour les messages qui inclut l’heure de création, le niveau de gravité et le contenu du message.
Configuration via un fichier de configuration externe
Il est également possible de configurer le système de journalisation en utilisant un fichier de configuration externe au format INI ou JSON. Voici un exemple de fichier de configuration logging.conf
:
ini[loggers]
keys=root
[handlers]
keys=consoleHandler
[formatters]
keys=simpleFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)
[formatter_simpleFormatter]
format=%(asctime)s - %(levelname)s - %(message)s
Pour utiliser ce fichier de configuration dans votre code Python, vous pouvez le charger comme ceci :
pythonimport logging.config
logging.config.fileConfig('logging.conf')
# Utilisation de la journalisation
logging.debug('Ceci est un message de débogage')
logging.info('Ceci est un message informatif')
logging.warning('Ceci est un message d\'avertissement')
logging.error('Ceci est un message d\'erreur')
logging.critical('Ceci est un message critique')
Niveaux de gravité de la journalisation
Le module logging
définit plusieurs niveaux de gravité pour les messages, qui sont utilisés pour indiquer l’importance relative d’un message. Voici les niveaux de gravité standard, du moins critique au plus critique :
- DEBUG : Utilisé pour des informations de débogage détaillées.
- INFO : Utilisé pour des informations d’état générales.
- WARNING : Utilisé pour indiquer un problème potentiel.
- ERROR : Utilisé pour indiquer une erreur non critique.
- CRITICAL : Utilisé pour indiquer une erreur critique.
Gestion des enregistrements
Une fois que le système de journalisation est configuré, vous pouvez utiliser les différentes méthodes du module logging
pour enregistrer des messages selon le niveau de gravité approprié. Par exemple, vous pouvez utiliser logging.debug()
pour enregistrer des messages de débogage, logging.info()
pour des messages informatifs, et ainsi de suite.
Utilisation avancée
Le module logging
offre également des fonctionnalités avancées telles que la possibilité de définir des filtres pour contrôler quels messages sont enregistrés, l’utilisation de gestionnaires personnalisés pour rediriger les messages vers des destinations spécifiques, et la création de différents enregistreurs pour différents composants d’une application.
Conclusion
En conclusion, le logging en Python est une fonctionnalité puissante et flexible pour enregistrer des messages et des informations pendant l’exécution d’une application. En configurant correctement le système de journalisation et en utilisant les niveaux de gravité appropriés, les développeurs peuvent obtenir des informations précieuses sur le comportement de leur code, ce qui facilite le débogage, la surveillance et la maintenance des applications Python.
Plus de connaissances
Bien sûr, plongeons un peu plus en profondeur dans l’utilisation avancée du module logging
en Python.
Configuration avancée
Outre la configuration de base, le module logging
offre des fonctionnalités avancées pour une configuration plus flexible et dynamique du système de journalisation. Par exemple, vous pouvez utiliser des gestionnaires pour rediriger les messages vers différents emplacements, tels que des fichiers, des sockets réseau, des flux de données, etc.
Exemple de configuration avec des gestionnaires personnalisés
pythonimport logging
# Création d'un gestionnaire de fichier pour enregistrer les messages dans un fichier
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.INFO)
# Création d'un gestionnaire de console pour afficher les messages à l'écran
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
# Création d'un formatteur pour définir le format des messages
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
# Attribution du formatteur aux gestionnaires
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)
# Configuration du système de journalisation avec les gestionnaires créés
logger = logging.getLogger()
logger.addHandler(file_handler)
logger.addHandler(console_handler)
logger.setLevel(logging.DEBUG)
# Exemple d'utilisation de la journalisation
logger.debug('Ceci est un message de débogage')
logger.info('Ceci est un message informatif')
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 créé deux gestionnaires différents : un pour enregistrer les messages dans un fichier app.log
et un autre pour afficher les messages sur la console. Nous avons également défini un formatteur pour spécifier le format des messages enregistrés.
Filtrage des enregistrements
Le module logging
permet également de filtrer les enregistrements en fonction de certains critères. Vous pouvez créer vos propres filtres en définissant des classes qui implémentent la méthode filter(record)
et en les ajoutant à vos gestionnaires ou à vos loggers.
Exemple de filtrage des messages
pythonimport logging
class CustomFilter(logging.Filter):
def filter(self, record):
return 'important' in record.getMessage()
# Création d'un logger
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
# Création d'un gestionnaire de console
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
# Création d'un filtre personnalisé
custom_filter = CustomFilter()
# Attribution du filtre au gestionnaire de console
console_handler.addFilter(custom_filter)
# Configuration du formatteur
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)
# Attribution du gestionnaire de console au logger
logger.addHandler(console_handler)
# Exemple d'utilisation de la journalisation
logger.debug('Ceci est un message normal')
logger.info('Ceci est un message informatif')
logger.warning('Ceci est un message d\'avertissement')
logger.error('Ceci est un message d\'erreur')
logger.critical('Ceci est un message critique')
logger.info('Ceci est un message important')
logger.info('Ceci est un message très important')
Dans cet exemple, le filtre CustomFilter
est utilisé pour ne filtrer que les messages contenant le mot « important ». Seuls les messages contenant ce mot seront enregistrés dans la console.
Intégration avec d’autres bibliothèques
Le module logging
peut être intégré avec d’autres bibliothèques Python pour capturer et enregistrer les messages de ces bibliothèques dans le système de journalisation global.
Exemple d’intégration avec la bibliothèque requests
pythonimport logging
import requests
# Configuration du système de journalisation
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
# Envoi d'une requête HTTP avec la bibliothèque requests
response = requests.get('https://www.example.com')
# Journalisation de la réponse
logging.info('Statut de la requête : %s', response.status_code)
Dans cet exemple, les messages générés par la bibliothèque requests
sont automatiquement capturés par le système de journalisation global.
Conclusion
En somme, le module logging
en Python offre une multitude de fonctionnalités avancées pour une configuration flexible et un contrôle précis des enregistrements de messages. En comprenant ces fonctionnalités et en les utilisant de manière appropriée, les développeurs peuvent tirer le meilleur parti du système de journalisation pour faciliter le développement, le débogage et la maintenance de leurs applications Python.