目次
何を残すか
- ログは開発時でなく、運用時に重要になる
- 運用時のことを考えて「どんな情報が必要か」を考える
- 5W1Hを意識して、必要なログを想定する
- どのような問題が発生する可能性があるのかを洗い出し、可能な限り、障害解決に役立つログを出力する
- ログに何を残すかは次のような5W1Hを意識する
5W1H
- What
- どの処理を、何を対象に行っているのか
- 対象データはどれなのか
- 何行目を処理しているのか、何行目で問題があったのか
- Who
- どのユーザーが対象なのか
- When
- いつのログなのか
- ロガーの設定で日時を出力する
- Where
- どこまで処理が進んだのか、どこで発生しているログなのか、どの処理なのか
- バッチ処理がどこまで進んだのか
- ロガー名をPythonモジュールのパスにして、どのモジュールで発生したログかわかるようにする
- エラーログの文字列でどの処理かをわかるようにする(ログメッセージからコードの箇所がわかる)
- Why
- なぜ発生したログなのか
- エラーログを残すときに、エラーのメッセージやexec_infoを残すようにする
- exc_info=Trueを指定するとエラー時のトレースバックがログに出力される
- HowMuch
- どれくらいのデータ量なのか
- 店舗ごとの売り上げ件数が何件なのか
def main():
try:
logger.info('売上CSV取込み処理開始')
sales_data = load_sales_csv()
logger.info('売上CSV読み込み済み')
for code, sales_rows in sales_data:
logger.info('取込み開始 - 店舗コード: %s, データ件数: %s', code, len(sales_rows))
try:
for i, row in enumerate(sales_rows, start=1):
logger.debug('取込み処理中 - 店舗(%s): %s行目', code, i)
...
except Exception as exc:
logger.warning('取込みエラー - 店舗(%) %s行目: エラー %s', code, i, exc, exc_info=True)
continue
logger.info('取込み正常終了 - 店舗コード: %s', code)
logger.info('売上CSV取込み処理終了')
except Exception as exc:
logger.error('売上CSV取込み処理で予期しないエラー発生: エラー %s', exc, exc_info=True)