【Python入門】printより便利なログ出力、loggingの基本と実践

Python

こんにちは!今回は、Pythonでプログラムの動作を記録する「loggingモジュール」について解説します。

Pythonで開発していると、つい print() でデバッグしてしまいがちですが、
本格的なアプリ開発では「logging」を使うのが定番です。

この記事では、初心者の方でもすぐに使えるように、
printとの違い基本的な使い方実践例を丁寧に紹介します。

スポンサーリンク
スポンサーリンク

loggingとは?なぜ必要?

printとの違い

比較項目print()logging
用途一時的なデバッグ開発・運用両方
出力先標準出力(コンソール)ファイル、端末、メールなど自由
重要度レベルなしDEBUG / INFO / WARNING / ERROR / CRITICAL
実運用向かないログとして必須

loggingは、アプリの「動作履歴」を残すための仕組みです。例えばエラーの原因調査やユーザー動作の追跡に使われます。

基本の使い方(最初の一歩)

import logging

# ログ設定(最低レベルをINFOに設定)
logging.basicConfig(level=logging.INFO)

logging.debug("これはデバッグ用(表示されません)")
logging.info("アプリが起動しました")
logging.warning("設定ファイルが見つかりません")
logging.error("ファイルの読み込みに失敗しました")
logging.critical("致命的なエラーが発生しました")

出力例:

INFO:root:アプリが起動しました
WARNING:root:設定ファイルが見つかりません
ERROR:root:ファイルの読み込みに失敗しました
CRITICAL:root:致命的なエラーが発生しました

ログレベルとは?

ログには「重要度」を表すレベルがあります。

レベル意味
DEBUG開発者向けの細かい情報変数の値を追跡
INFO通常の情報アプリが開始・終了
WARNING注意すべき事象設定ファイルなし
ERRORエラー発生ファイル読込失敗
CRITICAL致命的な問題システム停止級

logging.basicConfig(level=logging.INFO)
と設定すると、INFO以上(WARNING, ERROR, CRITICAL)が出力されます。

ログをファイルに出力

実践コード例

import logging

# ログをファイルに出力
logging.basicConfig(
    filename='app.log',           # 出力ファイル名
    level=logging.DEBUG,          # 全レベル出力
    format='%(asctime)s [%(levelname)s] %(message)s',  # 出力フォーマット
    datefmt='%Y-%m-%d %H:%M:%S',  # 日付形式
)

logging.info("アプリが起動しました")
logging.debug("デバッグ情報を記録中")
logging.error("ファイルが見つかりません")

app.log ファイルには以下の感じで出力されます。

2025-10-26 23:15:31 [INFO] アプリが起動しました
2025-10-26 23:15:31 [DEBUG] デバッグ情報を記録中
2025-10-26 23:15:31 [ERROR] ファイルが見つかりません

format(フォーマット指定)の基本

loggingでは、フォーマットを自由に設定できます。

記法意味
%(asctime)s日時2025-10-26 22:35:12
%(levelname)sログレベルINFO, ERRORなど
%(message)s実際のメッセージ“処理が完了しました”
%(filename)sファイル名main.py
%(lineno)d行番号42

たとえば👇のようにすると、より詳細なログになります。

logging.basicConfig(
    format='%(asctime)s [%(levelname)s] (%(filename)s:%(lineno)d) → %(message)s'
)

複数の出力先(コンソール+ファイル)

import logging

# ロガー作成
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

# ハンドラ設定(ファイルとコンソール)
file_handler = logging.FileHandler('apptest.log')
stream_handler = logging.StreamHandler()

# フォーマット設定
formatter = logging.Formatter('%(asctime)s [%(levelname)s] %(message)s')
file_handler.setFormatter(formatter)
stream_handler.setFormatter(formatter)

# ハンドラをロガーに追加
logger.addHandler(file_handler)
logger.addHandler(stream_handler)

# ログ出力
logger.info("アプリ起動")
logger.warning("設定ファイルが存在しません")

このようにすれば、画面にも出力され、同時にファイルにも保存されます!

よくある質問(FAQ)

❓ Q1. print() ではダメなの?

→ 小規模スクリプトならOKですが、規模が大きくなると「何がいつ起きたか」が分からなくなります。
loggingなら時間・レベル・行番号も残せるため、トラブル解析が格段に楽になります。

❓ Q2. ログファイルが大きくなったら?

logging.handlers.RotatingFileHandler を使えば、自動でローテーションできます。

from logging.handlers import RotatingFileHandler
handler = RotatingFileHandler('app.log', maxBytes=100000, backupCount=3)

❓ Q3. 複数モジュールで共有したい

getLogger(__name__) を使うと、モジュールごとに独立したロガーを持てます。

まとめ

print()よりも柔軟で便利
✅ ログレベルで重要度を管理
✅ ファイル出力やフォーマット指定も簡単
✅ 運用時のトラブル調査にも役立つ

おすすめ教材・ツール紹介

アプリ開発を初めて行う方におすすめな教材・書籍・ツールを紹介します。

おすすめ書籍

👉 Pythonでつくるデスクトップアプリ(Amazon)
アプリ開発を優しく紹介しています。loggingモジュールを使用することでよりレベルが上がると思います。

Python環境構築ツール

👉 Anaconda(公式サイト)
loggingを学ぶ際も、AnacondaのJupyter Notebookで試すと理解が早いです。

ディタおすすめ

👉 Visual Studio Code
拡張機能「Python」+「Log File Highlighter」を入れると、ログの色分けが超便利!

まとめ:loggingは初心者の次の一歩

loggingを覚えると、コードの信頼性・トラブル対応力が一気に向上します。
「動く」から「管理できる」プログラムへ進化させる第一歩です。

タイトルとURLをコピーしました