「本番でエラーが出た!でもどこが原因かさっぱりわからない…😱」
こんな経験、一度はありますよね。とりあえずコードをいじってみたり、Stack Overflowを片っ端から読んだり、最近だとエラーをそのままAIに貼り付けたり…。
実は、こういった「当てずっぽうデバッグ」から抜け出すためのスキルが海外エンジニアのコミュニティで注目を集めています。それが 「戦略的ロギング(Strategic Logging)」 です。
戦略的ロギングって何が違うの?

「ロギングって print() でデバッグするやつでしょ?」と思った方、ちょっと待ってください。
ただ値を出力するだけの print デバッグとは根本的に考え方が違います。戦略的ロギングとは、「コードが今何をしているかを、体系的に可視化する仕組みを最初から設計すること」 です。
イメージとしては、飛行機のフライトレコーダーに近いです。問題が起きたときに「さかのぼって確認できる記録」を意図的に残しておく、という発想ですね。
Pythonで実践する戦略的ロギングの基本
Pythonには標準ライブラリに logging モジュールがあります。これを使えば print とは比べ物にならないくらい柔軟なログが残せます。
まずは基本的な設定から見てみましょう👇
# strategic_logging_sample.py
import logging
# ログの基本設定(レベル・フォーマット・出力先を一括で管理)
logging.basicConfig(
level=logging.DEBUG,
format="%(asctime)s [%(levelname)s] %(funcName)s: %(message)s",
handlers=[
logging.StreamHandler(), # コンソール出力
logging.FileHandler("app.log") # ファイルにも保存
]
)
logger = logging.getLogger(__name__)
def calculate_discount(price, discount_rate):
# 処理の入り口でINFOログを残す
logger.info(f"割引計算を開始 - 元値: {price}, 割引率: {discount_rate}")
# 想定外の値はWARNINGで記録
if discount_rate > 1.0:
logger.warning(f"割引率が100%を超えています: {discount_rate}")
result = price * (1 - discount_rate)
logger.debug(f"計算結果: {result}") # 詳細はDEBUGレベル
return result
# 実行
calculate_discount(5000, 0.2)
calculate_discount(5000, 1.5) # 意図的におかしな値を渡してみる
ポイントをまとめるとこんな感じです:
- ✅ DEBUG:細かい処理の途中結果(開発中のみ確認)
- ✅ INFO:処理の開始・終了など「何が起きたか」の記録
- ✅ WARNING:おかしいけど動いている状態の記録
- ✅ ERROR:処理が失敗したときの記録
本番で役立つ「ログを設計する」という考え方
戦略的ロギングの本質は、「何かが起きてから調べる」のではなく「調べやすいように先に仕込んでおく」 ことです。
具体的には、以下のポイントを意識するだけでデバッグの効率がガラッと変わります👇
- 関数の入り口と出口にログを入れる
- ループや分岐の結果を記録しておく
- 外部APIへのリクエスト・レスポンスを必ず残す
- 例外は
logger.exception()でスタックトレースごと保存する
まとめ
戦略的ロギングは「事後のデバッグ」を「事前の設計」に変えるスキルです。print を使い捨てするのをやめて、logging モジュールで意図的にログを設計する習慣をつけるだけで、本番環境でのトラブル対応が驚くほどラクになります。
ぜひ今日から自分のコードに取り入れてみてください!🚀 一緒にデバッグ力を底上げしていきましょう。





