Pythonでロギングする(ログレベルとかメッセージのフォーマットもする時の標準的?な方法)


概要

Pythonでロギングする時の手順

環境

  • Python 3.7

実装

import logging
import sys

# ルートロガーの取得
logger = logging.getLogger()

# ログレベルの設定
logger.setLevel(logging.DEBUG)

# ルートロガーにハンドラが登録されていない場合、自前のハンドラを用意追加する
# Lambda上で実行する場合、最初からハンドラが登録されているため、一律でハンドラを追加すると、
# ログが2つに出るようになるので注意
if len(logger.handlers) == 0:
    h = logging.StreamHandler(stream=sys.stdout)
    logger.addHandler(h)

# ハンドラにフォーマットをセットする
for handler in logger.handlers:
    handler.setFormatter(logging.Formatter("format: %(message)s"))

# 設定した内容でログがでる
logger.info("auaua")
# > format: auaua

# ルートロガーに設定を追加しているので、名前付きでロガーを取得しても設定を全部引き継ぐ
# ※厳密にいうと、名前付きロガーに打ったログ情報がルートロガーに伝播している
alogger = logging.getLogger("a")
alogger.info("alogger")
# > format: alogger

ablogger = logging.getLogger("a.b")
ablogger.info("ablogger")
# > format: ablogger