Pythonで正しくログ出力をする

pythonでログ出力はprint関数に頼りまくってたので、正しくログ出力をやる。

ログに出すことで、

  • 処理結果がファイルとして保存されるので、調査しやすい。
  • 日時が出力でき、時系列が把握しやすくなる
  • デバック出力とアプリ実行時の出力と分けて記載することができる。

今回作ったもの

ログ出力処理ロジック(app.util.Log.py)

import yaml
import logging.config

path = os.path.dirname(os.path.abspath(__file__))
with open(path + '/logging.yaml') as file:
    obj = yaml.safe_load(file)
    logging.config.dictConfig(obj)
    logger = logging.getLogger('root')

ログ出力利用処理(main.py)

from app.util.Log import logger
logger.debug("test")
 

設定ファイル(logging.yaml)

version: 1

formatters:
  simple:
    format: '%(asctime)s - %(name)s - %(levelname)s - %(message)s'

handlers:
  console:
    class: logging.StreamHandler
    level: DEBUG
    formatter: simple
    stream: ext://sys.stdout

  file:
    class: logging.handlers.TimedRotatingFileHandler
    filename: log.log
    level: DEBUG
    when: d
    backupCount: 14
    encoding: UTF-8
    formatter: simple


loggers:
  root:
    level: DEBUG
    handlers: [console]
    propagate: no

root:
  level: DEBUG
  handlers: [console, file]

出力結果

2022-03-21 07:47:32,457 - root - DEBUG - test