Evolution #4253
Revoir la bibliothèque d’aide au système de logging
Description
Les scripts python de creole sur lequels je travaille utilise le morceau de code suivant :
option = parse_cmdline()
log = creole.log.init_creole_log(level=getattr(logging, option.log_level.upper()))
# Add console output
log.addHandler(logging.StreamHandler(sys.stdout))
if option.debug:
# debug override default logging option
log.setLevel(level=logging.DEBUG)
elif option.verbose:
log.setLevel(level=logging.INFO)
Il faudrait fournir une méthode simple et utilisable pour créer un logger avec différentes sorties et différents niveaux de capture.
Un script aurait besoin :- de créer un logger à la racine (
logging.getLogger()
sans argument) - de définir le niveau de capture général en fonction d’une options de la ligne de commande (
-v log.info
,-d log.debug
) - de définir des sorties
- de restreindre le niveau de log sur une sortie
On peut aussi logger beaucoup d’infos dans des fichiers/syslog (logging.INFO
ou logging.DEBUG
) et n’afficher sur la sortie d’erreur/standard que ce qui est demandé par l’utilisateur.
Demandes liées
Révisions associées
Ajout d’une bibliothèque de colorisation des stream de log
Cette bibliothèque gère si le stream est un tty afin de ne pas afficher
d’échappement en cas de redirection.
Code sous BSD disponible à l’adresse : https://code.google.com/p/logutils/
- pyeole/loghandlers.py: Défini la classe ColorizingStreamHandler().
Ref: #4253 @10m
Ajout d’une fonction d’initialisation de logger
Cette fonction permet de configurer facilement un logger pour la console,
syslog et dans un fichier.
Le logger de console utilise par défaut les couleurs suivantes si les
sorties standard et d’erreur sont des tty :
- DEBUG: bleu sur sortie d’erreur
- INFO: pas de couleur sur sortie standard
- WARNING: jaune sur sortie d’erreur
- ERROR: rouge sur sortie d’erreur
- CRITICAL: blanc sur fond rouge sur sortie d’erreur
L’ancienne API est marquée comme deprecated.
- pyeole/log.py (LevelRangeFilter): N’accepte que les messages dont la
sévérité est comprise dans un intervale.
(LevelFilter): N’accepte que les messages d’une sévérité
donnée.
(init_logging): Initie un logger, seul un logger sur
console est activé par défaut.
Fixes: #4253 @3h
Ajout de la notice de copyright pour pyeole.loghandlers.py
- debian/copyright: pyeole.loghandlers.py est sous BSD 3 clauses.
Ref: #4253 @2m
L’initialisation d’un logger ne doit pas désactiver ceux des bibliothèques
- pyeole/log.py (init_logging): Ne pas désactiver les loggers existants.
Ref: #4253 @5m
Utilisation de pyeole.log.init_logging()
Suppression de la bibliothèque creole.log et des tests associés.
- bin/CreoleCat: Utilisation de l’API pyeole pour initialiser un logger
racine.
- bin/CreoleService: Idem
- bin/CreoleGet: Idem. Le mode verbeux active les « warnings » sur la
sortie d’erreur car les log « info » sortent sur la sortie standard.
Ref: #4253 @5m
Amélioration de la gestion des logs sur la sortie d’erreur
- pyeole/log.py (LevelsFilter): Nouvelle class utilisant une liste de
niveau de log à accepter.
(LevelRangeFilter): Hérite de LevelsFilter.
(init_logging): Ajout du paramètre « as_root » pour définir un logger
racine même lorsque le paramètre « name » est spécifié.
Utilisation de « LevelsFilter » comme classe de filtre.
Définition d’un filtre spécifique pour gérer le cas de la sortie standard.
Ajout du nom de l’appelant dans le format de message.
Suppression du handler « stddebug » maintenant que le handler
« stderr » intègre le niveau « DEBUG ».
Ref: #4253 @30m
Historique
#1 Mis à jour par Daniel Dehennin il y a plus de 11 ans
- Assigné à mis à developpeurs_eole
#2 Mis à jour par Daniel Dehennin il y a plus de 11 ans
Quelques liens pour utiliser le système de log à la place des print_<color>
définis dans source:pyeole/ansiprint.py?rev=ac4e5fc.
- Une première approche : http://stackoverflow.com/questions/384076/how-can-i-color-python-logging-output
- Semble beaucoup mieux car gère
isatty()
: http://plumberjack.blogspot.fr/2010/12/colorizing-logging-output-in-terminals.html
#3 Mis à jour par Daniel Dehennin il y a plus de 11 ans
- Statut changé de Nouveau à Résolu
- % réalisé changé de 0 à 100
Appliqué par commit f29846271d14610aa6d20c72c310658ae8ed3397.
#4 Mis à jour par Joël Cuissinat il y a plus de 11 ans
- Statut changé de Résolu à Fermé
On estime que c'est bon :)