カテゴリ: Python 更新日: 2026/04/03

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. 例外処理とloggingを組み合わせてエラーを記録する

3. 例外処理とloggingを組み合わせてエラーを記録する
3. 例外処理とloggingを組み合わせてエラーを記録する

次に、Pythonの例外処理とloggingモジュールを組み合わせる方法を見ていきます。tryとexceptを使ったエラーハンドリングにloggingを追加することで、エラーが起きたときのメッセージをログに書き出せるようになります。これにより、ユーザーには優しいメッセージを表示しつつ、開発者側では詳細なエラー情報をログから確認できるようになります。


import logging

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

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

try:
    result = divide(10, 0)
    print("結果:", result)
except Exception as e:
    logging.error("計算中に例外が発生しました", exc_info=True)
    print("エラーが発生しました。詳細はログを確認してください。")

エラーが発生しました。詳細はログを確認してください。

この例では、ゼロで割り算をしようとして例外が発生しますが、画面には簡単なメッセージだけが表示され、詳しいエラー情報はerror.logというファイルに記録されます。exc_info=Trueという指定によって、例外の種類やエラーメッセージ、どの行で発生したかといった詳細なスタックトレースも一緒に保存されます。

4. ログレベルを使い分けて分かりやすく記録する

4. ログレベルを使い分けて分かりやすく記録する
4. ログレベルを使い分けて分かりやすく記録する

loggingモジュールには複数のログレベルがあり、それぞれ意味が異なります。DEBUGは開発中の細かな情報、INFOは通常の実行状況、WARNINGは注意が必要な状態、ERRORはエラー発生時、CRITICALは致命的な問題を表します。すべてを同じレベルで記録してしまうと、重要度の違いが分かりにくくなってしまうため、レベルを使い分けることが大切です。

たとえば、ユーザーの入力値が少し怪しい場合にはWARNINGを使い、処理が完全に失敗した場合にはERRORを使うように決めておくと、ログを読み返したときに状況を素早く把握できます。プログラミング未経験の人でも、レベルごとに意味を覚えておけば、ログの読み方にすぐ慣れていきます。

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の理解も深まりますよ。」

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

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

関連記事:
カテゴリの一覧へ
新着記事
New1
Python
PythonでREST APIを作る方法!初心者向けFastAPI入門|Python API開発の基本
New2
PHP
PHPのコード品質向上ツール完全解説!PHPStan(ピーエイチピースタン)とPHPCS(ピーエイチピーシーエス)で初心者でも安全にデバッグしよう
New3
Python
Pythonでデータベースのログを記録・監視する方法を完全解説!初心者向けデータベースログ管理入門
New4
PHP
PHPのログファイルを活用したエラートラッキング完全ガイド|初心者でもわかるPHPデバッグ入門
人気記事
No.1
Java&Spring記事人気No1
PHP
PHP のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド
No.2
Java&Spring記事人気No2
Python
Pythonのインストール&環境構築!Windows・Mac・Linuxでの手順を初心者向けに解説
No.3
Java&Spring記事人気No3
Python
PythonでExcelファイル(.xlsx)を操作する方法を徹底解説!初心者でもできるopenpyxl・pandasの使い方
No.4
Java&Spring記事人気No4
Python
Pythonのコンストラクタ(__init__)の使い方!初心者でもわかるオブジェクトの初期化
No.5
Java&Spring記事人気No5
Python
Pythonでテキストファイルを1行ずつ読み込む方法(readline() / readlines())
No.6
Java&Spring記事人気No6
PHP
PHPの特殊文字とエスケープ処理を完全ガイド!初心者向けにhtmlspecialcharsとhtmlentitiesをやさしく解説
No.7
Java&Spring記事人気No7
Python
Pythonでデータベースの接続プールを使う方法を徹底解説!初心者向けPythonデータベース接続プール入門
No.8
Java&Spring記事人気No8
Python
Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い