私のプログラムでは、最初に次のようなロガーを定義します。
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 に再度設定する必要があるのはなぜですか? これは、さまざまなモジュールを含むパッケージ全体でログ モジュールを作成するための最良の方法ですか、それともより良い解決策がありますか?