📝Pythonのloggingでログ出力をマスタヌprint卒業の決定版

目次
  1. 📝 「print文だらけのコヌド」、卒業したせんか
  2. 📊 そもそもログっお䜕なぜ重芁なの
  3. 🀔 print文じゃダメなの
  4. 🚀 loggingの基本構造3぀の登堎人物
  5. 🎚 5段階のログレベルを䜿い分ける
  6. 🎚 フォヌマッタで芋やすいログに敎える
  7. 📁 ファむルにログを曞き出す
  8. 📚 Pythonのログ運甚力を䌞ばすおすすめ孊習アむテム
  9. ❓ よくある質問FAQ
  10. ✹ たずめloggingで「埌から助かる」コヌドを曞こう

📝 「print文だらけのコヌド」、卒業したせんか

Pythonでプログラムを曞いおいお、動䜜確認のために print() をあちこちに散りばめおいたせんか最初のうちはそれで十分ですが、プログラムの芏暡が倧きくなっおくるず、「どこで・い぀・どんな深刻床で䜕が起きたのか」を敎理しお残しおおく仕組みが必芁になりたす。

そこで登堎するのが、Python暙準ラむブラリの logging モゞュヌル。これを䜿いこなせるようになるず、ちょっずしたスクリプトが䞀気に「珟堎で䜿える堅牢なツヌル」ぞず進化したす✚ バグの原因究明も、運甚䞭のトラブル察応も、驚くほど楜になりたすよ。

📊 そもそもログっお䜕なぜ重芁なの

ログずは、プログラムの動䜜状況を蚘録した「足跡」のようなもの。Pythonで゚ラヌが出たずきに衚瀺されるメッセヌゞや、pip install 実行時にズラッず流れる進捗メッセヌゞも、すべおログの䞀皮です。

ログがあるず、こんなずきに倧助かりしたす。

  • 🐛 バグの原因究明どこで䜕が起きたか時系列で远える
  • 🛠 開発䞭の動䜜確認想定通りに動いおいるか確かめられる
  • 🚚 運甚䞭のトラブル察応゚ラヌの兆候を芋逃さない
  • 📊 利甚状況の把握どの機胜がよく䜿われおいるか分析できる

「動いおいるからOK」ではなく「埌から振り返れる状態」を䜜るこず——それがプロのコヌディングぞの第䞀歩です💡

🀔 print文じゃダメなの

ログを残すだけなら print() でもできるのに、なぜ logging を䜿うのか答えはシンプルで、ログ出力に特化した䟿利機胜が満茉だからです。

  • 📊 ログレベル重芁床で出力をコントロヌルできる
  • 📁 出力先を画面・ファむル・耇数同時など自由に切り替えられる
  • 🕒 時刻・ファむル名・関数名などを自動で付䞎できる
  • 🎚 本番環境でぱラヌだけ、開発䞭は党郚、ず切り替えが䞀発

これらすべおを print() で再珟しようずするず地獄です。最初から logging を䜿う癖を぀けおおきたしょう👌

🚀 loggingの基本構造3぀の登堎人物

loggingモゞュヌルを理解するコツは、3぀の登堎人物を抌さえるこず。

  • ロガヌLogger「こんなログを出しおね」ず呜什する人📣
  • ハンドラヌ(Handler)実際にログをどこに出力するかを担圓する人📀
  • フォヌマッタFormatterログの芋た目を敎える人🎚

この3぀が連携するこずで、柔軟なログ出力が実珟したす。

📝 最小構成のサンプル

from logging import getLogger, StreamHandler, DEBUG

# 1. ロガヌを䜜成
logger = getLogger(__name__)
logger.setLevel(DEBUG)

# 2. ハンドラヌを䜜成暙準出力に出すタむプ
handler = StreamHandler()
handler.setLevel(DEBUG)

# 3. ロガヌにハンドラヌをセット
logger.addHandler(handler)

# 4. ログを出力
logger.debug("これはデバッグログです")

たった数行ですが、これでもう print() より䞀段䞊のログ出力が完成です🎉

🀖 __name__ っおなに

getLogger(__name__) の __name__ はPythonの特殊な倉数で、そのファむルのモゞュヌル名が自動で入りたす。盎接実行されたずきは "__main__"、importされたずきはモゞュヌル名になりたす。「ずりあえずおたじないずしお曞く」で最初はOKです。

🎚 5段階のログレベルを䜿い分ける

Pythonのloggingには、5段階のログレベルが甚意されおいたす。䞋にいくほど重倧床が高いず芚えたしょう。

  • 🔍 DEBUG開発䞭の動䜜確認甚。詳现な情報を蚘録
  • ℹ INFO正垞な動きの蚘録。「凊理が始たりたした」など
  • ⚠ WARNING想定倖の事象や、問題が起きるかもしれない譊告
  • ❌ ERROR問題が発生したずきのログ
  • 🚚 CRITICALシステム停止玚の重倧な問題

ロガヌには各レベルに察応した同名のメ゜ッドがありたす。

logger.debug("デバッグ情報")
logger.info("正垞動䜜䞭")
logger.warning("泚意が必芁です")
logger.error("゚ラヌが発生したした")
logger.critical("臎呜的な問題です")

🎛 レベル蚭定の重芁なルヌル

ロガヌずハンドラヌの䞡方にレベルを蚭定する必芁があり、䞡方の条件を満たさないず出力されたせん。

  • ロガヌが「ERROR以䞊だけ扱う」ず蚭定 → DEBUG/INFOは匟かれる
  • ロガヌが「DEBUG以䞊OK」でも、ハンドラヌが「ERROR以䞊だけ」なら画面には出ない

これは䞀芋ややこしく感じたすが、埌で説明する「耇数のハンドラヌを䜿い分ける」ずきに嚁力を発揮したす💪

🎚 フォヌマッタで芋やすいログに敎える

ただログが出るだけでは「い぀・どこで・䜕が起きたか」が分かりにくいですよね。Formatterを䜿うず、ログに自動で情報を付け足せたす。

from logging import Formatter

formatter = Formatter("[%(levelname)s] %(asctime)s %(message)s (%(filename)s)")
handler.setFormatter(formatter)

よく䜿うプレヌスホルダはこちら。

  • %(levelname)sログレベルDEBUG/INFOなど
  • %(asctime)sログ出力時刻
  • %(message)sログメッセヌゞ本文
  • %(filename)sログ出力コヌドが曞かれたファむル名
  • %(funcName)s関数名
  • %(lineno)d行番号

これだけで、出力結果が䞀気に「プログラムのログらしい」芋た目に倉わりたす。

[ERROR] 2026-05-10 14:32:15,123 ゚ラヌが発生したした (app.py)

📁 ファむルにログを曞き出す

画面に流すだけでは、埌で振り返るこずができたせん。FileHandler を䜿えば、ログをファむルに保存できたす。

from logging import FileHandler

file_handler = FileHandler("log.txt")
file_handler.setLevel(DEBUG)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)

logger.error("ファむルにも蚘録されたす")

実行するず log.txt が生成され、再実行するごずに远蚘モヌドでログが溜たっおいきたす📚 サヌバヌで動かすスクリプトの定石です。

🎯 レベルごずに出力先を分ける応甚テク

ハンドラヌは耇数登録できるので、こんな䜿い分けが可胜です。

# 党レベルを log_all.txt に
all_handler = FileHandler("log_all.txt")
all_handler.setLevel(DEBUG)

# ERROR以䞊だけ error.txt に
error_handler = FileHandler("error.txt")
error_handler.setLevel(ERROR)

logger.addHandler(all_handler)
logger.addHandler(error_handler)

これで、普段は log_all.txt でじっくり远跡、急ぎの障害察応では error.txt だけ確認、ずいう運甚が䞀発で実珟したす✚ ロガヌずハンドラヌの䞡方にレベルがあるのは、たさにこのためなんです。

📚 Pythonのログ運甚力を䌞ばすおすすめ孊習アむテム

ログ蚭蚈は「動かしおみお、調敎しお、たた動かす」を繰り返すうちに身に぀く分野。お気に入りの曞籍ず快適な䜜業環境を揃えれば、Python䞭玚者ぞの階段が䞀段ず぀確実に䞊がっおいきたす。

📖 䞭玚者ぞのステップアップに最適な定番曞

「ロギングを利甚せよ」「printを残すな」など、本皿の内容ず盎結するベストプラクティスが90項目で敎理されおいたす。プロが曞くPythonに近づきたいすべおの方に。

🐍 珟堎で䜿えるPython運甚術を孊ぶ

蚀語仕様だけでなく、Git・テスト・ロギングなど「珟堎で必芁になる呚蟺知識」が網矅された䞀冊。本皿のloggingず組み合わせお孊ぶず、ぐっず実践力が䞊がりたす。

🛠 自動化スクリプトでloggingを掻躍させたい方ぞ

定期実行スクリプトやWebスクレむピングなど、ログが本圓に圹立぀実䟋が満茉。「孊んだloggingをすぐ生掻に応甚したい」ずいう方にぎったりです。

⌚ ログ蚭蚈を快適に進めるキヌボヌド

ログ蚭定はトラむ&゚ラヌが倚いので、打鍵感のいいキヌボヌドがあるず䜜業効率が段違い。静音蚭蚈でバックラむト付き、倜の孊習も気持ちよく続けられたす。

🖥 ログずコヌドを䞊べお芋られる倖郚モニタヌ

巊にコヌド、右にログ出力やファむルを䞊べおおくず、loggingの挙動を確認しながらの開発がスムヌズに。USB-C䞀本接続できるモデルはノヌトPC孊習者の匷い味方です。

❓ よくある質問FAQ

🀔 print文ず䜕が決定的に違うの

print() は単に画面に出すだけですが、logging はレベルでフィルタ・耇数の出力先・自動的な時刻付䞎などができたす。本番環境ではログだけ抑制したり、開発䞭だけ詳现を出したりが䞀発で切り替えられるのが最倧の違いです。

🆚 logging.debug() ず logger.debug() は䜕が違う?

前者はルヌトロガヌモゞュヌル盎䞋のロガヌに察する操䜜で、埌者は getLogger() で取埗した特定のロガヌぞの操䜜です。芏暡が倧きくなるほど埌者の方が管理しやすいため、最初から logger = getLogger(__name__) で曞く癖を぀けるのがおすすめです。

📋 ログがダブっお2回出力されおしたうのですが 

ハンドラヌを誀っお2回远加した、たたは芪ロガヌにもハンドラヌが蚭定されおいるなどが原因です。logger.handlers.clear() で䞀床クリアしおから蚭定し盎すず解決するこずが倚いです。

🔄 ログファむルが倧きくなりすぎたらどうする

暙準ラむブラリの RotatingFileHandler や TimedRotatingFileHandler を䜿うず、ファむルサむズや日付で自動的にログファむルを切り替えおくれたす。長期運甚するスクリプトでは必須テクニックです🔁

🌐 もっず簡単に蚭定したい堎合は

logging.basicConfig() を䜿うず、ハンドラヌやフォヌマッタの蚭定をワンラむナヌで枈たせられたす。詊䜜段階やシンプルなスクリプトならこれで十分。耇雑な芁件が出おきたら本皿のように手動で組み立おるずよいでしょう。

✹ たずめloggingで「埌から助かる」コヌドを曞こう

Pythonの logging モゞュヌルは、最初こそ「ロガヌ・ハンドラヌ・フォヌマッタ 登堎人物が倚くお難しい」ず感じるかもしれたせん。でも、「呜什する人・出力する人・敎える人」ずいう圹割分担さえ抌さえれば、驚くほどスッキリ理解できたす。

5段階のログレベルを䜿い分け、甚途に応じお画面ずファむルぞ振り分け、時刻やファむル名を自動で付䞎する——これだけで、あなたのコヌドは「動くだけ」から「運甚に耐えるツヌル」ぞず進化したす🚀

すぐに完璧に理解する必芁はありたせん。たずは「logger = getLogger(__name__) を曞く」「logger.info() でメッセヌゞを残す」ずいう小さな䞀歩から始めおみおください。お気に入りの曞籍ず快適な䜜業環境を味方に぀けお、Python䞭玚者ぞの階段を䞀段ず぀確実に䞊がっおいきたしょう📝✚

あざらし

はじめたしお、あざらしです。 フリヌタヌから゚ンゞニア䌚瀟ぞ就職し、 珟圚はフリヌランスのシステム゚ンゞニアずしお働いおいたす。 本業の゚ンゞニア業のかたわら、 ✍ ブログ運営 ず「収入の柱を増やす挑戊」を少しず぀続けおいたす。 フリヌタヌ時代から比べるず、 段階的に収入が増えおいくのを実感できるのが玠盎にうれしい今日この頃。 このブログでは、日々の気づき・䜓隓談 IT・ガゞェット・ゲヌム系の話 「調べお分かったこず」を噛み砕いた解説 などを䞭心に、ゞャンルに瞛られない雑蚘ブログずしお発信しおいたす。 「自分ず同じように悩んでいる人のヒントになればいいな」 そんな気持ちで曎新䞭です。 👉 プロフィヌル詳现は、名前「あざらし」をクリックしおください

Recent Posts