Projet

Général

Profil

Evolution #4253

Revoir la bibliothèque d’aide au système de logging

Ajouté par Daniel Dehennin il y a plus de 11 ans. Mis à jour il y a plus de 11 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
developpeurs_eole
Catégorie:
-
Début:
10/10/2012
Echéance:
% réalisé:

100%

Temps passé:
Distribution:
EOLE 2.4

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

Lié à creole - Anomalie #4347: Ne pas logger lorsque l’on propage une exception Fermé 26/10/2012 31/05/2013
Lié à creole - Anomalie #4349: creoled ne peut pas démarrer sans rsyslog Fermé 26/10/2012

Révisions associées

Révision 7ba618ec (diff)
Ajouté par Daniel Dehennin il y a plus de 11 ans

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

Révision f2984627 (diff)
Ajouté par Daniel Dehennin il y a plus de 11 ans

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

Révision 023a3056 (diff)
Ajouté par Daniel Dehennin il y a plus de 11 ans

Ajout de la notice de copyright pour pyeole.loghandlers.py

  • debian/copyright: pyeole.loghandlers.py est sous BSD 3 clauses.

Ref: #4253 @2m

Révision d5699597 (diff)
Ajouté par Daniel Dehennin il y a plus de 11 ans

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

Révision cd27c0c3 (diff)
Ajouté par Daniel Dehennin il y a plus de 11 ans

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

Révision ba7a563a (diff)
Ajouté par Daniel Dehennin il y a plus de 11 ans

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.

#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

#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 :)

Formats disponibles : Atom PDF