59

PythonのLoggingモジュールのsetlevel()関数で変数を使用する方法があるかどうか誰かが知っていますか?

現在、私はこれを使用しています:

Log = logging.getLogger('myLogger')
Log.setLevel(logging.DEBUG)

しかし、私はこれが欲しいです:

Log = logging.getLogger('myLogger')
levels = {'CRITICAL' : logging.critical,
    'ERROR' : logging.error,
    'WARNING' : logging.warning,
    'INFO' : logging.info,
    'DEBUG' : logging.debug
}
level = levels['INFO']
Log.setLevel(level)

しかし、それは機能していないようです-それは何もログに記録しないだけです。

これは、単一の構成ファイル内の変数から一連のスクリプト全体のログレベルを設定できるようにするためです。

4

6 に答える 6

132

また、これを行うことができるはずです:

Log = logging.getLogger('myLogger')
level = logging.getLevelName('INFO')
Log.setLevel(level)

このlogging.getLevelName(lvl)関数は両方の方法で機能します。私はそれを使用します、それは動作します(あなたはあなたのPython実装をチェックするべきですが)。

これにより、独自の辞書を維持する手間が省け、タイプミスの可能性が減ります。

于 2013-03-12T17:31:04.297 に答える
8

Python 3で問題が発生し、これが機能するようになりました: https ://docs.python.org/3/howto/logging.html

# myapp.py
import logging
import mylib

def main():
    logging.basicConfig(filename='myapp.log', level=logging.INFO)
    logging.info('Started')
    mylib.do_something()
    logging.info('Finished')

if __name__ == '__main__':
    main()
于 2015-08-20T09:34:14.307 に答える
7

logging.setLevel()intまたはstrを取ります。

したがって、以下は問題なく機能します(少なくともPython 3.7では)。

logger = logging.getLogger(__name__)
logger.setLevel("DEBUG")
于 2019-03-26T09:37:05.957 に答える
5

モジュールでの使用getattrはどうですか?logging

import logging
str_level = 'DEBUG'
level = getattr(logging, str_level)
logger = logging.getLogger("my_logger")
logger.setLevel(level)
print(logger.getEffectiveLevel())
于 2017-10-31T04:23:00.370 に答える
3

オプションの環境変数を活用することは非常に便利で柔軟であることがわかりました。

class Foo():
    def __init__(self):
        self.logger = logging.getLogger(__name__)
        level = logging.getLevelName(os.environ.get('LOG_LEVEL', 'ERROR'))
        logging.basicConfig(level=level)

    def bar(self):
        self.logger.debug('Log something')
于 2019-10-09T18:29:27.080 に答える
0

私はこれを以下で機能させることができました。Dockerでこれを使用しているので、環境変数セクションを追加しましたが、必要に応じて追加できます。このようにして、必要なものを選択し、スクリプトを再実行できます。

#Manual Testing Variables If Needed
#os.environ["LOG_LEVEL_SELECTOR"] = "DEBUG, INFO, or ERROR"

#Setting Log Level Test
logger = logging.getLogger('json')
logger.addHandler(json_handler_out)
logger_levels = {
    'ERROR' : logging.ERROR,
    'INFO' : logging.INFO,
    'DEBUG' : logging.DEBUG
}
logger_level_selector = os.environ["LOG_LEVEL_SELECTOR"]
logger.setLevel(logger_level_selector)
于 2020-09-23T19:27:17.647 に答える