Dans un script python que j'écris, j'essaie de consigner les événements à l'aide du module de journalisation. J'ai le code suivant pour configurer mon enregistreur:
ERROR_FORMAT = "%(levelname)s at %(asctime)s in %(funcName)s in %(filename) at line %(lineno)d: %(message)s"
DEBUG_FORMAT = "%(lineno)d in %(filename)s at %(asctime)s: %(message)s"
LOG_CONFIG = {'version':1,
'formatters':{'error':{'format':ERROR_FORMAT},
'debug':{'format':DEBUG_FORMAT}},
'handlers':{'console':{'class':'logging.StreamHandler',
'formatter':'debug',
'level':logging.DEBUG},
'file':{'class':'logging.FileHandler',
'filename':'/usr/local/logs/DatabaseUpdate.log',
'formatter':'error',
'level':logging.ERROR}},
'root':{'handlers':('console', 'file')}}
logging.config.dictConfig(LOG_CONFIG)
Lorsque j'essaie de courir logging.debug("Some string")
, je n'obtiens aucune sortie sur la console, même si cette page de la documentation indique que logging.debug
l'enregistreur racine devrait afficher le message. Pourquoi mon programme ne produit-il rien et comment puis-je y remédier?
level != NOTSET
ou la racine (si aucun n'est trouvé). La racine a unWARNING
niveau par défaut. Ceci est écrit dans la section à laquelle vous avez lié (Logger.setLevel
).logging
vous devez appelerlogging.basicConfig()
au moins une fois. Sinon, vous pourriez être très surpris que les enregistreurs enfants n'impriment rien. Les fonctions de journalisation sur l'enregistreur racine l'appellent paresseusement.Plusieurs années plus tard, il semble y avoir encore un problème de convivialité avec le journal Python. Voici quelques explications avec des exemples:
Une source courante de confusion provient d'un enregistreur racine mal initialisé. Considère ceci:
Production:
En fonction de votre environnement d'exécution et des niveaux de journalisation, la première ligne de journal (avant la configuration de base) peut ne pas apparaître nulle part .
la source
logging.basicConfig( filename='logging.txt', level=logging.DEBUG) logger = logging.getLogger() logger.info('Test B') logging.info('Test A')
logger = logging.getLogger()
, le niveau est réglé sur AVERTISSEMENT même si j'ai spécifié le niveau commeDEBUG
. Sais-tu ce que je fais de mal?Pour tous ceux qui souhaitent une réponse très simple: définissez simplement le niveau que vous souhaitez afficher. En haut de tous mes scripts, je viens de mettre:
Ensuite, pour afficher quoi que ce soit à ou au-dessus de ce niveau:
Il s'agit d'un ensemble hiérarchique de cinq niveaux afin que les journaux s'affichent au niveau que vous avez défini, ou plus . Donc, si vous souhaitez afficher une erreur, vous pouvez utiliser
logging.error("The plumbus is broken")
.Les niveaux, dans l'ordre croissant de gravité, sont
DEBUG
,INFO
,WARNING
,ERROR
etCRITICAL
. Le paramètre par défaut estWARNING
.C'est un bon article contenant cette information mieux exprimée que ma réponse:
https://www.digitalocean.com/community/tutorials/how-to-use-logging-in-python-3
la source
Essayez peut-être ceci? Il semble que le problème soit résolu après avoir supprimé tous les gestionnaires dans mon cas.
la source
SyntaxError: invalid syntax