web-dev-qa-db-fra.com

Journalisation Python - Vérifier l'emplacement des fichiers journaux?

Quelle est la méthodologie pour savoir où les instructions du journal Python sont stockées?

c'est-à-dire si je le fais:

import logging
log = logging.getLogger(__name__)
log.info('Test')

Où pourrais-je trouver le fichier de log? Aussi, quand j'appelle:

logging.getLogger(__name__)

Est-ce que cela est en quelque sorte lié à la manière dont l'enregistreur se comportera/enregistrera?

22
zallarak

Le module logging utilise des gestionnaires attachés aux enregistreurs pour décider comment, où et même si les messages sont finalement stockés ou affichés. Vous pouvez configurer logging par défaut pour écrire également dans un fichier. Vous devriez vraiment lire les docs , mais si vous appelez logging.basicConfig(filename=log_file_name)log_file_name est le nom du fichier dans lequel vous voulez écrire les messages (notez que vous devez le faire avant que tout autre élément de logging soit appelé), les messages consignés à tous les enregistreurs (à moins qu'une reconfiguration supplémentaire ne se produise plus tard) y seront écrits. Soyez conscient du niveau défini pour le consignateur. si la mémoire est suffisante, info est inférieur au niveau de consignation par défaut. Vous devez donc inclure level=logging.INFO dans les arguments de basicConfig pour que votre message se retrouve dans le fichier.

En ce qui concerne l’autre partie de votre question, logging.getLogger(some_string) renvoie un objet Logger, inséré à la position correcte dans la hiérarchie à partir de l’enregistreur racine, le nom correspondant à la valeur de some_string. Appelé sans argument, il renvoie le consignateur racine. __name__ renvoie le nom du module actuel. logging.getLogger(__name__) renvoie donc un objet Logger dont le nom est défini sur le nom du module actuel. Il s'agit d'un modèle courant utilisé avec logging, car il fait en sorte que la structure de journalisation reflète la structure de module de votre code, ce qui rend souvent les messages de journalisation beaucoup plus utiles lors du débogage.

19
Silas Ray

Pour obtenir l'emplacement du journal d'un simple enregistreur de fichiers, essayez

logging.getLoggerClass().root.handlers[0].baseFilename
7
Taran

Pour trouver l'emplacement du fichier journal, essayez d'instancier votre objet log dans un shell Python de votre environnement et examinez la valeur de:

log.handlers[0].stream

0
Paul Bissex

Excellente question @zallarak. Malheureusement, bien qu'ils soient faciles à créer, les Loggers sont difficiles à inspecter. Ceci obtient les noms de fichier de tous les Handlers pour un logger:

filenames = []
for handler in logger.handlers:
    try:
        filenames.append(handler.fh.name)
    except:
        pass

Le bloc try gère les exceptions qui se produisent lorsque la recherche du nom de fichier échoue.

0
Arthur