web-dev-qa-db-fra.com

Déterminer si le consignateur racine est défini sur le niveau DEBUG en Python?

Si je règle le module de journalisation sur DEBUG avec un paramètre de ligne de commande comme celui-ci:

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

Comment puis-je savoir plus tard si l'enregistreur a été défini sur DEBUG? J'écris à un décorateur que Chronométrera une fonction si le drapeau True lui est transmis, et si aucun drapeau n'est donné, il utilisera par défautpour imprimer des informations de minutage lorsque l'enregistreur racine est défini sur DEBUG.

73
Sean McAllister
logging.getLogger().getEffectiveLevel()

logging.getLogger() sans argument obtient le logger de niveau racine.

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

91
Tor Valamo

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

Vous trouverez ci-dessous le code utilisé par le module de journalisation.

def getEffectiveLevel(self):
    """
    Get the effective level for this logger.

    Loop through this logger and its parents in the blogger hierarchy,
    looking for a non-zero logging level. Return the first one found. 
    """
    logger = self
    while logger:
        if logger.level:
            return logger.level
        logger = logger.parent
    return NOTSET

def isEnabledFor(self, level):
    """
    Is this logger enabled for level ‘level’?
    """
    if self.manager.disable >= level:
        return 0
    return level >= self.getEffectiveLevel()
84
Pat

Juste

logging.getLogger().level == logging.DEBUG
1
Keelung