dak ブログ

python、rubyなどのプログラミング、MySQL、サーバーの設定などの備忘録。レゴの写真も。

python で logging を使ってログ出力

2021-09-20 15:36:02 | python
python で logging を使ってログを出力する方法のメモ。

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 ***


この記事についてブログを書く
« python から kuromoji を実行 | トップ | Elasticsearch のインストー... »

python」カテゴリの最新記事