カテゴリ: Python 更新日: 2026/06/21

Pythonのloggingモジュール入門!初心者でもできるエラーログの記録方法をやさしく解説

Pythonのloggingモジュールを使ってエラーをログに記録する方法
Pythonのloggingモジュールを使ってエラーをログに記録する方法

先生と生徒の会話形式で理解しよう

生徒

「Pythonのプログラムを書いているときにエラーが出ても、そのとき何が起きたのかすぐに分からなくて困ってしまいます。エラーをどこかに記録しておく方法ってあるんですか?」

先生

「そのときに役立つのがPythonのloggingモジュールです。エラーや警告をログとしてファイルに残しておけば、後からゆっくり確認できますよ。」

生徒

「ログという言葉は聞いたことがありますが、具体的にどういうものなんでしょうか?難しそうで少し不安です。」

先生

「ログというのは、プログラムの動きやエラーの内容を記録したメモのようなものです。Pythonのloggingモジュールを使えば、初心者でも簡単にログ出力ができます。まずは基本から一緒に見ていきましょう。」

1. Pythonのloggingモジュールとは?【printとの違いも解説】

1. Pythonのloggingモジュールとは?【printとの違いも解説】
1. Pythonのloggingモジュールとは?【printとの違いも解説】

Pythonのlogging(ロギング)モジュールとは、プログラムが「いつ」「どこで」「どのような」動きをしたのかを記録するための標準ライブラリです。「標準ライブラリ」なので、別途インストールする必要はなく、import loggingと1行書くだけですぐに使い始められます。

プログラミング初心者の方は、エラーの確認にprint()関数を使いがちですが、実は運用フェーズではloggingの方が圧倒的に有利です。なぜなら、printは画面に表示して消えてしまいますが、loggingはファイルとして保存できるため、数日前に発生した「謎のエラー」の原因も後から特定できるからです。

未経験者向け:身近な例え
「print」は、その場限りのつぶやき。「logging」は、後で読み返せる航海日誌(ログブック)のようなものです。

例えば、以下のような非常にシンプルなコードで、その便利さを実感してみましょう。


import logging

# ログの記録ルールを「メモ帳(app.log)」に保存するように設定
logging.basicConfig(filename='app.log', level=logging.INFO)

print("画面にだけ表示されます")
logging.info("これはファイルに保存される大切な記録です")

このコードを実行すると、画面には「画面にだけ表示されます」と出ますが、同時にapp.logというファイルが自動で作られ、そこに実行した時間が刻まれます。これは、夜中に自動で動くプログラムや、ユーザーのパソコンで動くアプリを開発する際に、「トラブルの証拠」を確実に残すための必須テクニックです。ログを味方につけることで、バグ修正(デバッグ)の効率が劇的に向上します。

2. logging.basicConfigで簡単なログ設定をしよう

2. logging.basicConfigで簡単なログ設定をしよう
2. logging.basicConfigで簡単なログ設定をしよう

Pythonでログを記録する際、まず最初に行うのが「どのようなルールでログを出すか」という初期設定です。これを行うのがlogging.basicConfig()という関数です。この関数を使うことで、ログを画面に出すのかファイルに保存するのか、あるいはどのような見た目(フォーマット)にするのかを一括で指定できます。

特に重要なのが「ログレベル」の設定です。これは情報の重要度を仕分けするフィルターのようなもので、主に以下の5つを使い分けます。

レベル名 役割・使いどころ
DEBUG 開発中の細かい動作確認用(計算の途中経過など)
INFO 正常な動作の記録(プログラムの開始・終了など)
WARNING 注意が必要な状態(設定が古い、想定外の挙動など)
ERROR エラー発生(処理が中断された、書き込み失敗など)
CRITICAL 致命的な問題(システム全体の停止など)

それでは、未経験の方でも分かりやすいシンプルな設定例を見てみましょう。このコードでは「いつ、どの重要度で、どんなメッセージが出たか」を整理して表示するように設定しています。


import logging

# basicConfigでログの「出し方」をカスタマイズする
logging.basicConfig(
    level=logging.INFO,  # INFO以上のレベル(重要度)を記録する設定
    format="%(asctime)s [%(levelname)s] %(message)s", # 時刻、レベル名、内容の順に表示
    datefmt="%Y-%m-%d %H:%M:%S" # 時刻を見やすく(2026-02-10 10:00:00形式)
)

# 実際にログを出してみる
logging.info("【記録】プログラムを正常に開始しました")
logging.warning("【注意】インターネットの接続が少し不安定です")
logging.error("【異常】データの保存に失敗しました")

このコードを実行すると、コンソール(黒い画面)に時刻付きで整えられたメッセージが表示されます。format引数に%(asctime)sなどを記述することで、手動で時間を打ち込まなくても、Pythonが自動で「エラーが起きた瞬間」を刻印してくれます。初心者のうちは、このbasicConfigをプログラムの冒頭に書く癖をつけるだけで、デバッグ(原因探し)の効率が格段にアップしますよ。

3. 例外処理(try-except)とloggingを組み合わせてエラーを自動記録する

3. 例外処理(try-except)とloggingを組み合わせてエラーを自動記録する
3. 例外処理(try-except)とloggingを組み合わせてエラーを自動記録する

Pythonでアプリを作っているとき、予期せぬエラーでプログラムが突然止まってしまった経験はありませんか?そんな時に便利なのが、「例外処理(try-except)」「logging」の組み合わせです。

この2つをセットで使うことで、「ユーザーには『ただいま混み合っています』と優しい画面を見せつつ、裏側のログファイルには『〇行目で計算ミスが発生!』という詳細な証拠を残す」といったプロ仕様の対応が可能になります。特に、後で原因を調べる際に不可欠な「スタックトレース(エラーの足跡)」を自動で保存できるのが最大のメリットです。


import logging

# ログの設定:エラー内容を「error.log」というファイルに保存する
logging.basicConfig(
    level=logging.ERROR,
    format="%(asctime)s [%(levelname)s] %(message)s",
    filename="error.log",
    encoding="utf-8"
)

def divide(a, b):
    return a / b

try:
    # 0で割るという「エラーが起きそうな処理」を実行
    result = divide(10, 0)
    print("結果:", result)
except Exception as e:
    # エラーが発生したときだけここが動く
    # exc_info=True を書くと、エラーの詳しい場所(何行目かなど)まで記録してくれる
    logging.error("計算処理中にエラーが発生しました", exc_info=True)
    print("【システム通知】予期せぬエラーが発生しました。ログファイルを確認してください。")

【システム通知】予期せぬエラーが発生しました。ログファイルを確認してください。

このサンプルでは、わざと「0で割り算」をしてエラーを発生させています。画面(コンソール)には短い通知が出るだけですが、自動生成されたerror.logを開くと、「ZeroDivisionError: division by zero」という具体的な原因と、プログラムのどの部分で失敗したかが時系列でびっしり記録されています。

exc_info=Trueという魔法の呪文を添えるだけで、プログラミング未経験の方でも「どこを直せばいいか分からない」という悩みから解放され、効率的なデバッグができるようになります。まずはこの形をテンプレートとして覚えておきましょう。

4. ログレベルを使い分けて運用を効率化しよう

4. ログレベルを使い分けて運用を効率化しよう
4. ログレベルを使い分けて運用を効率化しよう

Pythonのloggingモジュールには、情報の重要度を示す「ログレベル」が5段階用意されています。これらを適切に使い分ける最大のメリットは、後でログを読み返すときに「急いで対応すべき致命的なエラー」と「単なる動作確認の記録」を瞬時に見分けられる点にあります。

すべてを同じレベル(たとえばERRORだけなど)で記録してしまうと、ログファイルが情報の海になり、本当に重要なトラブルを見落とす原因になります。まずは、以下のシンプルな使い分けをマスターしましょう。


import logging

# 今回は「DEBUG」レベル以上に設定して、すべてのログが見えるようにします
logging.basicConfig(level=logging.DEBUG, format="%(levelname)s: %(message)s")

# 1. DEBUG: 開発中に変数の値を確認したいとき
user_id = 123
logging.debug(f"デバッグ中:現在のユーザーIDは {user_id} です")

# 2. INFO: プログラムがどこまで進んだか記録したいとき
logging.info("システムにログインしました")

# 3. WARNING: 処理は続けられるが、放っておくと危ないとき
logging.warning("メモリーの使用率が80%を超えました")

# 4. ERROR: エラーが発生して、一部の処理が失敗したとき
logging.error("メールの送信に失敗しました")

# 5. CRITICAL: システム全体が止まってしまうような重大な問題
logging.critical("データベースに接続できません。システムを停止します")

このようにレベルを分けておくと、たとえば「本番環境ではINFO以上だけを表示させ、開発中はDEBUGも表示させる」といった切り替えが、設定を1行変えるだけで可能になります。

プログラミング未経験の方は、まずは「普段の記録はINFO、困ったときはDEBUG、ヤバいときはERROR」という3段階から使い始めてみるのが、混乱せずにログを活用できるコツですよ。

5. ファイル出力と画面出力を組み合わせるイメージを持とう

5. ファイル出力と画面出力を組み合わせるイメージを持とう
5. ファイル出力と画面出力を組み合わせるイメージを持とう

loggingモジュールは、画面だけでなくファイルにもログを残せるのが強みです。basicConfigでfilenameを指定すればファイル出力になり、指定しなければ標準出力、つまり画面に表示されます。実務では、開発中は画面に多めにログを表示し、本番環境ではファイルに静かに記録しておくスタイルがよく使われます。これにより、ユーザーの操作を邪魔せずにトラブルを記録できます。

また、ログファイルは定期的に確認して、同じエラーが繰り返し発生していないかチェックする習慣をつけておくと安心です。エラーハンドリングとログ設計をセットで考えることで、Pythonのプログラムは格段に安定していきます。最初は小さなスクリプトでも、少しずつloggingモジュールを組み込んでいくことで、より実践的なコードに成長させることができます。

まとめ

まとめ
まとめ

ここまで、Pythonのloggingモジュールについて、基礎から実践的な使い方まで順番に見てきました。 loggingモジュールは、単にエラーを表示するための仕組みではなく、プログラムの動きを記録し、後から振り返るための大切な道具です。 初心者のうちはprint文で状況を確認することが多いですが、処理が増えたり、実行時間が長くなったりすると、それだけでは限界が出てきます。 その点、loggingを使えば、いつ・どこで・どんな状態だったのかを時系列で残せるため、トラブル対応や原因調査がとても楽になります。

記事の前半では、loggingモジュールがPythonの標準機能であること、そしてbasicConfigを使えば簡単にログ出力を始められることを学びました。 ログレベルを設定することで、重要度に応じたメッセージを出し分けられる点も、実務では非常に重要です。 INFOやWARNING、ERRORといったレベルを意識して使うだけで、ログの読みやすさが大きく変わります。

また、例外処理とloggingを組み合わせることで、ユーザーには分かりやすいメッセージを表示しつつ、 開発者向けには詳細なエラー情報をログファイルに残す、という理想的なエラーハンドリングができることも確認しました。 特にexc_infoを使ったスタックトレースの記録は、後から原因を調べる際に大きな助けになります。

ログを画面に出すか、ファイルに出すかを使い分ける考え方も重要なポイントです。 開発中は画面出力で素早く確認し、本番環境ではファイルに静かに記録する、という流れを意識すると、 Pythonプログラムの品質と信頼性が一段階上がります。 loggingは「今すぐ必要にならないから後回し」にされがちですが、早いうちから慣れておくと後で必ず役立ちます。

まとめとしてのサンプルプログラム

最後に、これまでの内容を意識した、シンプルで実用的なloggingのサンプルを見てみましょう。 エラー発生時にはログに記録し、画面には最低限のメッセージだけを表示する例です。


import logging

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

def load_data(value):
    if value < 0:
        raise ValueError("不正な値が渡されました")
    return value * 2

try:
    result = load_data(-1)
    logging.info("処理結果: %s", result)
except Exception:
    logging.error("データ処理中にエラーが発生しました", exc_info=True)
    print("問題が発生しました。詳細はログを確認してください。")

このように書いておけば、実行時にエラーが起きても、詳細はログファイルにしっかり残ります。 後からログを確認することで、同じミスを繰り返さないための改善にもつなげられます。

先生と生徒の振り返り会話

生徒

「loggingって難しそうだと思っていましたが、printの代わりに使う感覚から始めればいいんですね。 エラーを後から確認できるのは、すごく安心だと感じました。」

先生

「その気づきはとても大切ですね。最初はINFOやERRORだけでも十分です。 ログを残す習慣がつくと、プログラムのトラブル対応が本当に楽になります。」

生徒

「例外処理と組み合わせることで、ユーザーに優しい表示と、開発者向けの情報を分けられるのも便利ですね。 実際のアプリでも使えそうだと思いました。」

先生

「その通りです。loggingは小さなスクリプトから本格的なシステムまで幅広く使えます。 今回学んだ内容をベースに、少しずつログ設計を意識していくと、Pythonの理解も深まりますよ。」

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:
Python の例外処理の記事一覧へ
新着記事
New1
Python
Pythonの整数と浮動小数点数の違いとは?数値型の基本を解説
New2
Python
Pythonで文字列をリストに変換する方法!split()とjoin()の使い方
New3
Python
Pythonのbreakとcontinueの違いとは?ループの制御方法をマスター
New4
Python
Pythonのstartswith()・endswith()の使い方!文字列の前後をチェック
人気記事
No.1
Java&Spring記事人気No1
PHP
PHPの特殊文字とエスケープ処理を完全ガイド!初心者向けにhtmlspecialcharsとhtmlentitiesをやさしく解説
No.2
Java&Spring記事人気No2
PHP
PHP の文字列のフォーマット(sprintf, printf)
No.3
Java&Spring記事人気No3
Python
Pythonで文字列を置換する方法!replace()の使い方と正規表現の活用
No.4
Java&Spring記事人気No4
Python
Pythonのクロージャー(Closure)とは?関数内関数とnonlocalの活用
No.5
Java&Spring記事人気No5
Python
Pythonでリストを分割する方法(スライス / split() / itertools)
No.6
Java&Spring記事人気No6
Python
Pythonで経過時間を測る方法をやさしく解説!初心者向けtime.perf_counterとtime.sleepの使い方
No.7
Java&Spring記事人気No7
PHP
PHPの認証機能を実装する方法!初心者でもわかるログイン・ログアウト処理の基本
No.8
Java&Spring記事人気No8
Python
Pythonのstartswith()・endswith()の使い方!文字列の前後をチェック