web-dev-qa-db-ja.com

PythonでルートロガーがDEBUGレベルに設定されているかどうかを判断しますか?

次のようなコマンドラインパラメーターでロギングモジュールをDEBUGに設定した場合:

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

ロガーがDEBUGに設定されているかどうかを後で確認するにはどうすればよいですか? Trueフラグが渡された場合に関数のタイミングを計るデコレーターを作成しています。フラグが指定されていない場合、ルートロガーがDEBUGに設定されている場合、デフォルトでタイミング情報を出力します。

83
gct
_logging.getLogger().getEffectiveLevel()
_

引数なしのlogging.getLogger()は、ルートレベルのロガーを取得します。

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

101
Tor Valamo

実際、もっと良い方法があります:コードlogging.getLogger().isEnabledFor(logging.DEBUG)を使用してください。 getEffectiveLevel()の結果をどう処理するかを理解しようとしたときに見つけました。

以下は、ロギングモジュール自体が使用するコードです。

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()
92
Pat

ただ

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