[Python] Module logging

Fermé
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 - 18 janv. 2005 à 17:44
 LouDumo - 1 févr. 2011 à 15:31
Je suis émerveillé par les modules fournis avec Python.

Ma découverte du jour: le module logging.

Quand vous avez une appli avec beaucoup de classes ou de threads, il est parfois difficile de voir ce qui se passe.
Avec les threads, ça peut même tourner au cauchemard.


Le module logging permet d'avoir une hiérarchie de logs dans votre application.

exemple:
monappli
monappli.database
monappli.database.updateUsers
monappli.mail
etc.

Ces logs sont accessible de n'importe où dans l'application.
Chacune de vos classes/threads peut loguer dans un de ces logs
(très simple:
log = logger.getLogger('monappli.database') et puis
log.info('coucou'), ou log.error('oups !')).

Il y a plusieurs niveaux de criticité pour chaque message (debug, info, warning,error, exception, critical...)
Le module loggin enregistre tous ces messages.

Ensuite on peut se 'brancher' sur n'importe lequel de ces logs pour écouter les messages.

Par exemple, on peut se brancher sur 'monappli' pour voir les logs générés dans toute l'application.
Ou bien se brancher uniquement sur 'monappli.database' pour ne voir que ce qui concerne la base de données.



On peut choisir le niveau de vue: ne voir que les criticals, les warning ou jusqu'au détail (debug).
Et ça peut se changer dynamiquement: ça veut dire qu'on peut très bien aller sur une application en production et passer en mode 'debug' pour voir ce qui se passe sans interrompre l'application.
(Ils ont même prévu un socket serveur pour demander en live à l'appli de changer sa configuration de log !)

C'est absolument génial pour débuguer un problème en prod !




Le plus fort, c'est que quand on se branche sur un log, on peut pluguer un handler qui va automatiquement faire des actions:
- afficher à l'écran
- écrire dans un fichier
- écrire dans un fichier (avec log rotatif automatique)
- envoyer à un syslog
- écrire dans l'eventlog de Windows
- envoyer sur un socket
- envoyer une trame UDP
- envoyer une requête HTTP
- envoyer un mail (SMTP)

En plus des niveaux de criticité, ils ont même prévu un système de filtres pour ne récupérer que les évènements qui vous intéressent.
On peut même définir ses propres niveaux de criticité.

Et évidemment ce module est totalement thread-safe.


Vraiment bien pensé, simple à utiliser, puissant, f*utrement pratique.
Absolument génial.

La personne qui a développé ce module mérite un gros bisou.

3 réponses

maily Messages postés 7556 Date d'inscription lundi 26 juin 2000 Statut Contributeur Dernière intervention 23 juin 2023 453
18 janv. 2005 à 18:01
Pour information, cela existe aussi en java:
log4j et logging sont les modules nécessaires.

;-)

 Maily   :-))))
ragondin, va au coin!
0
Ainsi qu'en C++ : log4cpp
0
"Avec les threads, ça peut même tourner au cauchemard."

Il n'y a pas de "d" à la fin de cauchemar !
0