Existe-t-il un moyen de faire en sorte que la journalisation Python en utilisant le logging
module génère automatiquement des éléments vers stdout en plus du fichier journal où ils sont censés aller? Par exemple, je voudrais que tous les appels logger.warning
, logger.critical
, logger.error
d'aller à leurs lieux destinés , mais en plus être copiés toujours stdout
. C'est pour éviter de dupliquer des messages comme:
mylogger.critical("something failed")
print "something failed"
Réponses:
Toutes les sorties de journalisation sont gérées par les gestionnaires; il suffit d'ajouter un
logging.StreamHandler()
à l'enregistreur racine.Voici un exemple de configuration d'un gestionnaire de flux (en utilisant
stdout
au lieu de la valeur par défautstderr
) et en l'ajoutant à l'enregistreur racine:la source
stdout
en plus?logging.Formatter
.La façon la plus simple de se connecter à stdout:
la source
stream=sys.stdout
fonctionne toujours pour la connexion à la console pour moi.Il est possible d'utiliser plusieurs gestionnaires.
Veuillez consulter: https://docs.python.org/2/howto/logging-cookbook.html
la source
sys.stdout
paramètre inch = logging.StreamHandler()
Vous pouvez créer deux gestionnaires pour file et stdout, puis créer un enregistreur avec l'
handlers
argument tobasicConfig
. Cela peut être utile si vous avez le même niveau de journalisation et le même format de sortie pour les deux gestionnaires:la source
Le moyen le plus simple de se connecter au fichier et à stderr:
la source
Voici une solution basée sur la
logging.config.dictConfig
méthode puissante mais peu documentée . Au lieu d'envoyer chaque message de journal àstdout
, il envoie des messages de niveau journalERROR
et supérieur àstderr
et tout le reste àstdout
. Cela peut être utile si d'autres parties du système écoutentstderr
oustdout
.la source
Puisque personne n'a partagé une doublure soignée, je partagerai la mienne:
la source
Voici un exemple extrêmement simple:
La sortie affichera "test msg" sur stdout et également dans le fichier.
la source