python で logging を使ってログを出力する方法のメモ。
dictConfig() で yaml でのログ出力設定に従って、logger を初期化します。
上記のプログラムから呼び出される Foo クラスでは、コンストラクタで logging.getLogger() で logger を取得し、
bar() メソッドで INFO ログを出力します。
yaml の設定ファイルで logger、その他の設定を読み込みます。
上記のプログラムを実行すると、以下のようなログが出力されます。
dictConfig() で yaml でのログ出力設定に従って、logger を初期化します。
import sys import yaml import logging from logging.config import dictConfig from foo import Foo def main(): conf_file = 'config.yml' with open(conf_file) as file: conf = yaml.safe_load(file) dictConfig(conf['logger']) logger = logging.getLogger(__name__) logger.info('*** main start ***') foo = Foo() foo.bar() return 0 if __name__ == '__main__': res = main() exit(res)
上記のプログラムから呼び出される Foo クラスでは、コンストラクタで logging.getLogger() で logger を取得し、
bar() メソッドで INFO ログを出力します。
import logging class Foo: def __init__(self): self.logger = logging.getLogger(__name__) def bar(self): self.logger.info('*** bar info ***')
yaml の設定ファイルで logger、その他の設定を読み込みます。
settings: key1: key2: key3: logger: version: 1 formatters: file_log_format: format: '[{asctime}] [{levelname}] [{module}] [{funcName}] {lineno}: {message:s}' datefmt: '%Y-%m-%d %H:%M:%S' style: '{' handlers: file: class : logging.handlers.TimedRotatingFileHandler formatter: file_log_format filename: test.log when: MIDNIGHT backupCount: 7 encoding: utf-8 root: level: INFO handlers: - file disable_existing_loggers: False
上記のプログラムを実行すると、以下のようなログが出力されます。
[2021-09-19 23:32:45] [INFO] [test2] [main] 22: *** main start *** [2021-09-19 23:32:45] [INFO] [foo] [bar] 13: *** bar info ***