私は標準ライブラリのログモジュールを使用していますが、説明できないことがありました。つまり、サブモジュールからロガーを取得すると、WARNING
ログレベルに関係なく、ロガーのレベルに関連付けられた文字列が表示されます。実際にに設定されます。さらに紛らわしいことに、サブモジュールロガーは正しいレベルでメッセージをログに記録します。main.py
以下を実行すると(最初にログファイル名を変更する)、私が何を意味するかがわかります。コンソールはWARNING
、other_moduleのロガーレベルがそうであることを出力しますが、下位レベルのメッセージを忠実に記録します。
何かのレベルに関連付けられた文字列が必要です。この動作はバグですか、それとも私は何かを誤解していますか?
main.py
import logging
import other_module
def create_logger(log_level):
level = log_level.upper()
switcher = {"DEBUG": logging.DEBUG,
"INFO": logging.INFO,
"WARNING": logging.WARNING,
"ERROR": logging.ERROR,
"CRITICAL": logging.CRITICAL}
logging.basicConfig(filename='C:/logs/log.log', #Change this
format="%(asctime)s | %(name)s [Line %(lineno)d] | %(levelname)s: %(message)s",
datefmt="%m/%d/%Y %H:%M:%S",
level=switcher[level])
logger = logging.getLogger("root")
return logger
def main():
log = create_logger('DEBUG')
log.debug("Message from main")
other_module.test_function()
if __name__ == '__main__':
main()
other_module.py
import logging
log = logging.getLogger(__name__)
print("other_module log level is {}".format(logging.getLevelName(log.getEffectiveLevel())))
def test_function():
log.debug('Message from other_module')
これはother_module.py
、ロギングシステムが構成される前にがロードされ、そのロガーがデフォルト値を使用してインスタンス化されるためです。
ロギングレベルのbasicConfig
前に電話をかけるimport other_module
と、意図したとおりになります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加