2009-12-31 1 views
55

Si je mets le module d'enregistrement à DEBUG avec un paramètre de ligne de commande comme ceci:Déterminer si root logger est défini sur le niveau DEBUG en Python?

if (opt["log"] == "debug"): 
    logging.basicConfig(level=logging.DEBUG) 

Comment puis-je dire plus tard si l'enregistreur a été réglé sur DEBUG? J'écris un décorateur qui chronométrera une fonction si le drapeau vrai lui est passé, et si aucun indicateur n'est donné, il utilisera par défaut pour imprimer l'information de synchronisation quand l'enregistreur de racine est réglé sur DEBUG.

+0

Vous voulez éventuellement utiliser quelque chose au lieu de coupler ce spécifique à l'enregistreur, comme opt ["time_functions"] (que vous pourriez par défaut True/False basé sur une autre option). –

Répondre

69
logging.getLogger().getEffectiveLevel() 

logging.getLogger() sans arguments obtient l'enregistreur de niveau racine.

http://docs.python.org/library/logging.html#logging.Logger.getEffectiveLevel

+0

Excellent, merci! Je faisais quelque chose comme ça (sauf passer explicitement "root" à getLogger), mais je le faisais dans la fonction __init__ de mon décorateur, avant que le logger soit mis au débogage: \ –

+1

Si vous voulez le nom de niveau, pas le number, vous pouvez l'utiliser pour convertir le nombre en une chaîne (comme 'INFO'): logging.getLevelName() – guettli

57

En fait, il y a une meilleure: utiliser le code logging.getLogger().isEnabledFor(logging.DEBUG). Je l'ai trouvé en essayant de comprendre quoi faire avec le résultat de getEffectiveLevel(). :-)

(est ci-dessous une image du code que le module d'enregistrement lui-même utilise.)

logging code

+0

Cela devrait être la réponse acceptée, car il fait la même chose avec une plus faible complexité d'exécution. – AndyJost

Questions connexes