【Python】loggingモジュールの使い方を初心者向けに解説!ログレベル・ファイル出力・例外記録まで

loggingモジュールの使い方解説

※このサイトの記事内では広告を掲載している場合があります。

プログラムの動作確認に、あちこちに print() を書いては、あとで消し忘れた経験はありませんか? 小さなスクリプトなら print() で十分ですが、ファイルが増えたり、他の人が使うプログラムになったりすると、「いつ・どこで・何が起きたか」を整理して残す仕組みが必要になります。

そこで活躍するのが、Python標準ライブラリの logging モジュールです。この記事では、loggingの基本的な使い方から、ログレベル、フォーマット、ファイル出力、例外のログ記録まで、初心者向けに実際に動くコードで解説します。

loggingモジュールとは?print()との違い

loggingは、プログラムの実行状況を「ログ」として記録するための標準モジュールです。インストール不要で、import logging だけで使えます。print() と比べた利点は次のとおりです。

  • 重要度(ログレベル)で出力を切り替えられる(開発中は詳細に、本番では重要なものだけ、など)
  • 日時・ファイル名・行番号などを自動で付けられる
  • コンソールだけでなくファイルにも同時に出力できる
  • コードを書き換えずに、設定だけで出力のオン・オフを変えられる

最小のコードで試す:logging.info()とlogging.warning()

まずは一番シンプルな例です。

import logging

logging.warning("ディスク容量が少なくなっています")
logging.info("この行は表示されません")

# 実行結果
# WARNING:root:ディスク容量が少なくなっています

info が表示されないのは、デフォルトのログレベルが WARNING だからです。次のセクションで詳しく見ていきましょう。

5つのログレベルを理解しよう

loggingには重要度の低い順に5つのレベルがあります。設定したレベル以上のログだけが出力されます。

  • DEBUG(10):開発中の詳細な情報
  • INFO(20):処理が順調に進んでいることの記録
  • WARNING(30):問題の兆候。動作は継続できる
  • ERROR(40):エラーで一部の処理に失敗した
  • CRITICAL(50):プログラム全体が続行できない重大な障害

レベルを変えるには basicConfig を使います。

import logging

logging.basicConfig(level=logging.DEBUG)

logging.debug("デバッグ情報")
logging.info("処理を開始します")
logging.warning("注意が必要です")
logging.error("エラーが発生しました")
logging.critical("致命的な障害です")

# 実行結果
# DEBUG:root:デバッグ情報
# INFO:root:処理を開始します
# WARNING:root:注意が必要です
# ERROR:root:エラーが発生しました
# CRITICAL:root:致命的な障害です

なお、basicConfig は最初に1回だけ呼ぶ設定で、すでにログが出力された後に呼んでも反映されません。プログラムの先頭で設定するのがコツです。

ログを入れる習慣がつくと、エラー対応もぐっと楽になります。try-exceptの基本が不安な方は、例外処理(try-except)の使い方も合わせてご覧ください。

ログのフォーマットを整える

format 引数を使うと、日時やレベル名などを自由に並べられます。

import logging

logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s [%(levelname)s] %(message)s",
    datefmt="%Y-%m-%d %H:%M:%S",
)

logging.info("アプリを起動しました")

# 実行結果(日時は実行時刻になります)
# 2026-11-06 09:00:00 [INFO] アプリを起動しました

よく使うフォーマット指定子は次のとおりです。

  • %(asctime)s:日時
  • %(levelname)s:ログレベル名
  • %(name)s:ロガー名
  • %(filename)s / %(lineno)d:ファイル名と行番号
  • %(message)s:ログのメッセージ

ファイルにログを保存する

import logging

logging.basicConfig(
    filename="app.log",
    encoding="utf-8",
    level=logging.INFO,
    format="%(asctime)s [%(levelname)s] %(message)s",
)

logging.info("ファイルに記録します")

# app.log の中身
# 2026-11-06 09:00:00,123 [INFO] ファイルに記録します

encoding 引数はPython 3.9以降で使えます。日本語を含むログは、文字化け防止のために指定しておくと安心です。

実践:例外をログに残す(logging.exception)

エラー処理でloggingが特に役立ちます。logging.exception() を except ブロックの中で呼ぶと、エラーメッセージに加えてトレースバック(どこで起きたかの履歴)も自動で記録されます。

import logging

logging.basicConfig(level=logging.INFO)

def divide(a, b):
    try:
        return a / b
    except ZeroDivisionError:
        logging.exception("0で割ろうとしました")
        return None

print(divide(10, 2))
print(divide(10, 0))

# 実行結果
# 5.0
# ERROR:root:0で割ろうとしました
# Traceback (most recent call last):
#   ...(トレースバックが続く)
# ZeroDivisionError: division by zero
# None

関数の書き方に自信がない方は、関数(def)の作り方の記事も参考にしてみてください。

モジュールごとにロガーを使う(getLogger)

規模が大きくなると、ファイルごとにロガーを分けるのが一般的です。logging.getLogger(__name__) でモジュール名つきのロガーを作れます。

import logging

logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO, format="%(name)s: %(message)s")

logger.info("ロガーを使ったログです")

# 実行結果(直接実行した場合、__name__ は __main__ になります)
# __main__: ロガーを使ったログです

モジュール分割の考え方は、import文とモジュールの使い方で詳しく解説しています。ファイルの扱いに慣れていない方は、with構文の使い方もあわせて確認しておくと、ログファイルの理解が深まります。

もっと効率的にPythonを学びたい人へ

ログ出力やエラー処理は、実務でコードを書くようになると必ず必要になるスキルです。ただ、独学だと「自分の書き方が正しいのか」を判断しづらく、つまずいたまま時間だけが過ぎてしまうことも少なくありません。

そんなときは、マンツーマン指導で質問できるスクールを検討するのも一つの手です。未経験からのPython習得や転職サポート、無料カウンセリングを用意しているスクールもあります。スクール選びの比較軸は、プログラミングスクールの選び方を比較した記事で詳しくまとめています。

※本記事には広告(アフィリエイトリンク)を含みます。

Pythonプログラミング|マンツーマンレッスンで初めてをプロに育てる【Python Winner】

まとめ

  • loggingは標準モジュールで、import logging だけで使える
  • ログレベルはDEBUG/INFO/WARNING/ERROR/CRITICALの5段階。デフォルトはWARNING以上
  • basicConfig でレベル・フォーマット・出力先ファイルを設定する(最初に1回だけ)
  • 例外の記録には logging.exception() が便利
  • 規模が大きくなったら getLogger(__name__) でモジュールごとにロガーを分ける

まずは print() をloggingに置き換えるところから始めてみてください。ログを残す習慣は、バグ調査の時間を大きく減らしてくれます。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

CAPTCHA