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?
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)
où 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.
Pour obtenir l'emplacement du journal d'un simple enregistreur de fichiers, essayez
logging.getLoggerClass().root.handlers[0].baseFilename
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
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.