[Python] Module logging
sebsauvage
Messages postés
33415
Statut
Modérateur
-
LouDumo -
LouDumo -
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.
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.
A voir également:
- [Python] Module logging
- Citizen code python avis - Accueil - Outils
- Pas de module ci - Forum TV & Vidéo
- Manque cam module - Forum TNT / Satellite / Réception
- Persistence module - Forum logiciel systeme
- Échec du chargement du module twitch - Forum jeux en ligne