GNU/Linux >> Tutoriels Linux >  >> Linux

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

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

Linux
  1. Comment activer la journalisation des requêtes MySQL/MariaDB

  2. Comment gérer les fichiers journaux à l'aide de Logrotate sous Linux

  3. Commande pour nettoyer les anciens fichiers journaux ?

  4. Journaliser uniquement les fichiers transférés avec Rsync ?

  5. Vérifier si la chaîne contient une sous-chaîne en Python

Comment vérifier la version de Python sous Linux, Mac et Windows

Comment vérifier la version de Python

Comment utiliser Logrotate pour gérer les fichiers journaux

Comment créer une configuration Rsyslog de journalisation centralisée

Puis-je enregistrer l'activité vi ?

Kernel Panic ne vide aucun fichier journal