71:info、errorだけでなくログレベルを使い分ける

ログを書くときに logger.infologger.error 以外を使っていますか? ログレベルを使い分けることで、ログの集約と通知がより効果的に行えます。

具体的な失敗

import logging

logger = logging.getLogger(__name__)


def main():
    ...
    for row in data:
        if not validate_product_data(...):
            logger.info("Skipped invalid sales data %r", row["id"])
        ...

この場合、商品のデータが不正な場合に logger.info でログ出力してしまっています。 「エラーほどではない」という理由でインフォレベルのログにすると、何かしらのアクションが必要な場合でも気づけないことが多いでしょう。

ベストプラクティス

このようにエラーとも言い切れない場合は logger.warning レベルを使いましょう。

cover

(中略)詳細は書籍 自走プログラマー をご参照ください

ではログレベルはどのように設定すべきでしょうか? ログレベルは以下を参考にしてください。

  • デバッグ( debug ):ローカル環境で開発するときだけ使う情報

  • インフォ( info ):プログラムの状況や変数の内容、処理するデータ数など、後から挙動を把握しやすくするために残す情報

  • ワーニング( warning ):プログラムの処理は続いているが、何かしら良くないデータや通知すべきことについての情報

  • エラー( error ):プログラム上の処理が中断したり、停止した場合の情報

  • クリティカル( critical ):システム全体や連携システムに影響する重大な問題が発生した場合の情報

cover

(中略)詳細は書籍 自走プログラマー をご参照ください