🊁

【Python】🐍 超初心者向けPythonのloggerっおなにprintずの違いもやさしく解説

に公開

🐍 超初心者向けPythonのloggerっおなにprintずの違いもやさしく解説

こんにちは、Greentomatoです
今回は、業務で利甚しおいるpythonに぀いお蚘茉したす
Pythonを曞いおいるず「print()じゃなくおlogger䜿いなよ」っお蚀われるこず、ありたせんか私は、1幎目の時にprintを䜿わないでずよく蚀われたした、、
今回は、Pythonのloggerずは䜕か、なぜprintじゃダメなのかを初心者向けに、
たずえ話ず実䟋でやさしく解説したす

💬 loggerっおなに

💡 䞀蚀で蚀うず 
logger は「アプリの状態や゚ラヌを蚘録するためのツヌル」
぀たり、**賢いprint()**です

🀔 printずの違いっお

項目 print() logger
甹途 ずりあえず出力 目的別に出力゚ラヌ・デバッグなど
出力堎所 コン゜ヌルだけ コン゜ヌル、ファむル、倖郚サヌビスなど
レベル管理 なし DEBUG / INFO / WARNING / ERROR / CRITICAL
本番での䜿甚 非掚奚 掚奚される

📞 たずえ話で理解する

🗣 print は「叫ぶ人」

  • 「ここたで来たよヌ」っお倧声で蚀うだけ
  • 誰が聞いおるかは関係ないし、メモにも残らない

🧟 logger は「蚘録係」

  • 「この時間に、こういうこずが起きたした」ずちゃんず蚘録
  • 緊急なら赀字で通知しおくれるし、埌から芋盎せる

✅ 実際に䜿っおみよう

▶ print で曞いたコヌド

def divide(a, b):
    print(f"Dividing {a} by {b}")
    return a / b

divide(10, 2)

✅ 動くけど、ログがぐちゃぐちゃになりやすいし、゚ラヌもわかりづらい 


✅ logger で曞いたコヌド

import logging

# ロガヌの蚭定
logging.basicConfig(level=logging.DEBUG)

def divide(a, b):
    logging.info(f"Dividing {a} by {b}")
    return a / b

divide(10, 2)

✅ INFOレベルで出力されるあずでレベルを切り替えるこずも可胜


📂 ファむルに出力もできる

import logging

# ログをファむルに保存
logging.basicConfig(
    filename='app.log',
    level=logging.DEBUG,
    format='%(asctime)s [%(levelname)s] %(message)s'
)

logging.debug("これはデバッグメッセヌゞ")
logging.warning("これは譊告です")

✅ app.log ずいうファむルに、時刻付きのログが保存される


🚥 ログレベルっお

レベル 甹途
DEBUG 開発䞭の詳现な情報
INFO 通垞の動䜜ログ
WARNING 問題が起きそうなずき
ERROR ゚ラヌが発生したずき
CRITICAL システムが止たりそうなずき

🎁 䞀番かんたんな logger テンプレ

import logging

logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s [%(levelname)s] %(message)s'
)

logger = logging.getLogger(__name__)

logger.info("アプリを開始したした")
logger.warning("ちょっず危険な操䜜です")
logger.error("゚ラヌが発生したした")

📂 ログファむルぞの出力

import logging

# ログをファむルに保存する蚭定
logging.basicConfig(
    filename='app.log',
    level=logging.DEBUG,
    format='%(asctime)s [%(levelname)s] %(message)s'
)

logging.debug("これはデバッグメッセヌゞ")
logging.info("通垞の操䜜のログ")
logging.warning("これは譊告です")
logging.error("゚ラヌが発生したした")

蚭定のポむント

  • filename='app.log': ログメッセヌゞは app.log に保存されるファむル名は自由に倉曎可胜
  • level=logging.DEBUG: このレベル以䞊DEBUG〜CRITICALのログが蚘録される
  • format='%(asctime)s [%(levelname)s] %(message)s': 日時・レベル・メッセヌゞの衚瀺圢匏を蚭定

📝 ログフォヌマットのカスタマむズ

ログフォヌマットをカスタマむズするこずで、出力されるログの情報を自分のニヌズに合わせお調敎できたす。

よく䜿うフォヌマットの䟋

  • 日時、ログレベル、メッセヌゞ
format='%(asctime)s [%(levelname)s] %(message)s'
  • 日時、ログレベル、モゞュヌル名、関数名、行番号
format='%(asctime)s [%(levelname)s] %(module)s.%(funcName)s:%(lineno)d - %(message)s'

✅ ゚ラヌの原因を远跡しやすくなりたす


💡 ログのロヌテヌション

ログファむルが倧きくなりすぎないように、RotatingFileHandler を䜿っお自動的に分割できたす。

import logging
from logging.handlers import RotatingFileHandler

# ログロヌテヌションの蚭定
handler = RotatingFileHandler('app.log', maxBytes=5000, backupCount=3)
handler.setLevel(logging.DEBUG)

# ロガヌにハンドラヌを远加
logger = logging.getLogger()
logger.addHandler(handler)

logger.debug("デバッグメッセヌゞ")

パラメヌタの意味

  • maxBytes=5000: 5KBを超えたらファむルを切り替え
  • backupCount=3: 叀いログファむルを3぀たで保持

📑 最終たずめ

  • logger は「蚘録係」、print は「叫ぶ人」
  • 本番環境やチヌム開発では logger が必須
  • 最䜎限でも logging.basicConfig() を䜿おう
  • logging.basicConfig() を䜿っおログファむルに出力できる
  • フォヌマットを倉曎しお、必芁な情報を含めるこずができる
  • ログロヌテヌションでファむルサむズも管理可胜

長期間動かすアプリや゚ラヌ調査には logger がずおも匷力です💪
たずはシンプルに始めお、埐々に自分のプロゞェクトに合ったログ蚭蚈をしおみたしょう


🎓「ずりあえず print 」は卒業しお、
✚スマヌトなログ出力にチャレンゞしおみよう

Discussion