Pythonのloggingモジュール入門!初心者でもできるエラーログの記録方法をやさしく解説
生徒
「Pythonのプログラムを書いているときにエラーが出ても、そのとき何が起きたのかすぐに分からなくて困ってしまいます。エラーをどこかに記録しておく方法ってあるんですか?」
先生
「そのときに役立つのがPythonのloggingモジュールです。エラーや警告をログとしてファイルに残しておけば、後からゆっくり確認できますよ。」
生徒
「ログという言葉は聞いたことがありますが、具体的にどういうものなんでしょうか?難しそうで少し不安です。」
先生
「ログというのは、プログラムの動きやエラーの内容を記録したメモのようなものです。Pythonのloggingモジュールを使えば、初心者でも簡単にログ出力ができます。まずは基本から一緒に見ていきましょう。」
1. Pythonのloggingモジュールとは?
Pythonのloggingモジュールは、プログラムの動作状況やエラーメッセージをログとして記録するための標準機能です。標準機能ということは、追加のインストールをしなくても、Pythonをインストールした時点で最初から使える便利な仕組みという意味です。初心者のうちは、printで画面に出力して様子を見ることが多いですが、本格的なエラーハンドリングや例外処理を行う場面ではloggingモジュールがとても役に立ちます。
ログを残しておくと、プログラムを実行していない時間帯に発生したエラーも後から確認できます。これは、夜中にサーバーで動いているPythonプログラムや、ユーザーが操作しているアプリケーションなどで特に重要です。トラブルが起きたときに、ログを見れば原因をたどりやすくなり、修正の時間を大きく短縮できます。
2. logging.basicConfigで簡単なログ設定をしよう
まずは最も基本的なloggingの使い方から確認してみましょう。loggingモジュールを使うときは、最初にログの出力方法やレベルを設定するためにbasicConfigという関数を呼び出します。レベルとは、ログの重要度を表すもので、DEBUG、INFO、WARNING、ERROR、CRITICALなどが用意されています。初心者のうちは、エラーや警告を中心に扱うだけでも十分役に立ちます。
import logging
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(message)s"
)
logging.info("プログラムを開始します")
logging.warning("設定ファイルが見つかりませんでした")
logging.error("処理中にエラーが発生しました")
このように書くと、情報レベルのメッセージ、警告、エラーを順番に出力できます。formatという部分では、ログの見た目を指定していて、時刻やレベル名、メッセージを含めることができます。画面に出すだけでなく、後から読み返したときに状況が分かるような形にしておくのがポイントです。
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. ログレベルを使い分けて分かりやすく記録する
loggingモジュールには複数のログレベルがあり、それぞれ意味が異なります。DEBUGは開発中の細かな情報、INFOは通常の実行状況、WARNINGは注意が必要な状態、ERRORはエラー発生時、CRITICALは致命的な問題を表します。すべてを同じレベルで記録してしまうと、重要度の違いが分かりにくくなってしまうため、レベルを使い分けることが大切です。
たとえば、ユーザーの入力値が少し怪しい場合にはWARNINGを使い、処理が完全に失敗した場合にはERRORを使うように決めておくと、ログを読み返したときに状況を素早く把握できます。プログラミング未経験の人でも、レベルごとに意味を覚えておけば、ログの読み方にすぐ慣れていきます。
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の理解も深まりますよ。」