Pour trouver l'emplacement du fichier journal, essayez d'instancier votre log
objet dans un shell Python dans votre environnement et en regardant la valeur de :
log.handlers[0].stream
Le logging
Le module 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 la documentation, 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 toute autre chose dans logging
est appelé), alors tous les messages enregistrés dans tous les enregistreurs (à moins qu'une reconfiguration supplémentaire ne se produise plus tard) y seront écrits. Sachez cependant à quel niveau l'enregistreur est réglé ; si ma mémoire est bonne, info
est inférieur au niveau de journalisation par défaut, vous devez donc inclure level=logging.INFO
dans les arguments de basicConfig
également pour que votre message se retrouve dans le fichier.
Quant à l'autre partie de votre question, logging.getLogger(some_string)
renvoie un Logger
objet, inséré à la position correcte dans la hiérarchie à partir du logger racine, le nom étant la valeur de some_string
. Appelé sans arguments, il renvoie le logger racine. __name__
renvoie le nom du module courant, donc logging.getLogger(__name__)
renvoie un Logger
objet avec le nom défini sur le nom du module actuel. Il s'agit d'un modèle courant utilisé avec logging
, car la structure de l'enregistreur reflète la structure du module de votre code, ce qui rend souvent les messages de journalisation beaucoup plus utiles lors du débogage.
Quelques bonnes réponses à ce sujet, mais la meilleure réponse n'a pas fonctionné pour moi car j'utilisais un type de gestionnaire de fichiers différent, et le handler.stream ne fournit pas le chemin, mais le descripteur de fichier, et en obtenir le chemin est un peu non évident. Voici ma solution :
import logging
from logging import FileHandler
# note, this will create a new logger if the name doesn't exist,
# which will have no handlers attached (yet)
logger = logging.getLogger('<name>')
for h in logger.handlers:
# check the handler is a file handler
# (rotating handler etc. inherit from this, so it will still work)
# stream handlers write to stderr, so their filename is not useful to us
if isinstance(h, FileHandler):
# h.stream should be an open file handle, it's name is the path
print(h.stream.name)
Pour obtenir l'emplacement du journal d'un simple enregistreur de fichiers, essayez
logging.getLoggerClass().root.handlers[0].baseFilename