7

私のプログラムでは、最初に次のようなロガーを定義します。

def start_logger():
        fh = logging.handlers.RotatingFileHandler('logger.log', 
                                                  maxBytes=1000000, 
                                                  backupCount=100)
        fh.setLevel(logging.DEBUG)

        ch = logging.StreamHandler(sys.stdout)
        ch.setLevel(logging.DEBUG)

        fh_fmt = '%(asctime)s %(levelname)8s %(message)s [%(filename)s:%(lineno)d]'
        #fh_fmt = '%(asctime)s - %(funcName)s - %(levelname)s - %(message)s'

        ch_fmt = '%(asctime)s %(levelname)8s %(message)s [%(filename)s:%(lineno)d]'
        #ch_fmt = '%(funcName)s - %(levelname)s - %(message)s'

        fh.setFormatter(logging.Formatter(fh_fmt))
        ch.setFormatter(logging.Formatter(ch_fmt))

        root = logging.getLogger()
        root.addHandler(fh)
        root.addHandler(ch)

次に、メイン プログラムから呼び出される複数のファイルがあります。それらが正しく機能するためには、次のことを行う必要があります。

import logging
log = logging.getLogger(__name__)
log.setLevel(logging.DEBUG)
log.debug("This debug message is ounly output when I set the level again to debug for this file. Otherwise the the log level for this file is WARNING.")

インポートするすべてのモジュールのデフォルト レベルが警告に設定されているのはなぜですか。log = logging.getLogger( name )でルートロガーをインポートするときに、それぞれのレベルを DEBUG に再度設定する必要があるのはなぜですか? これは、さまざまなモジュールを含むパッケージ全体でログ モジュールを作成するための最良の方法ですか、それともより良い解決策がありますか?

4

1 に答える 1