webentwicklung-frage-antwort-db.com.de

Bestimmen, ob der Root-Logger in Python auf DEBUG-Ebene gesetzt ist?

Wenn ich das Protokollierungsmodul mit einem Befehlszeilenparameter wie folgt auf DEBUG setze:

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

Wie kann ich später feststellen, ob der Logger auf DEBUG eingestellt ist? Ich schreibe einen Dekorator, der eine Funktion zeitlich festlegt, wenn ein True-Flag an ihn übergeben wird, und wenn kein Flag angegeben ist, werden die Timing-Informationen standardmäßig ausgegeben, wenn der Stammlogger auf DEBUG gesetzt ist.

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

logging.getLogger() ohne Argumente erhält den Logger auf Root-Ebene.

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

91
Tor Valamo

Eigentlich gibt es einen besseren: Verwenden Sie den Code logging.getLogger().isEnabledFor(logging.DEBUG). Ich habe es gefunden, als ich versuchte zu verstehen, was mit dem Ergebnis von getEffectiveLevel() zu tun ist.

Nachfolgend finden Sie den Code, den das Protokollierungsmodul selbst verwendet.

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

Gerade

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