Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで例外をログに記録する最良の方法とは?

Pythonプログラムの開発や運用において、例外(エラー)が発生した際にその詳細をログとして残しておくことは、トラブルシューティングやデバッグを行う上で非常に重要です。Pythonでは標準ライブラリのloggingモジュールを使うことで、例外情報を簡単かつ確実にログへ記録できます。

logging.exceptionメソッドで例外ログを作成する

まずloggingモジュールをインポートし、exceptブロック内でlogging.exception()メソッドを呼び出します。このメソッドは、指定したメッセージに加えて、発生した例外の種類やスタックトレース(Traceback)を自動的に付加して、ログレベルERRORで出力してくれます。

コード例

import logging

try:
    print('toy' + 6)
except Exception as e:
    logging.exception("これは例外ログです")

この例では、文字列と整数を連結しようとしてTypeErrorが発生します。

実行結果

ERROR:root:これは例外ログです
Traceback (most recent call last):
  File "example.py", line 3, in <module>
    print('toy' + 6)
TypeError: cannot concatenate 'str' and 'int' objects

出力内容の読み方

  • ERROR:root: … ログレベル(ERROR)とロガー名(root)を示しています。
  • Traceback: … 例外が発生したファイル名・行番号・該当するコード行が表示されます。
  • TypeError: … 発生した例外の種類と、具体的なエラーメッセージが出力されます。

注意点:exceptブロック内でのみ呼び出すこと

Python 3では、logging.exception()は必ずexceptブロックの中で呼び出す必要があります。公式ドキュメントでも警告されている通り、それ以外の場所で呼び出すと、予期しない奇妙な例外が発生する可能性があります。

応用:より柔軟なロギングの方法

ログレベルやフォーマットを細かく制御したい場合は、logging.error()exc_info=Trueを渡す方法も便利です。

import logging

try:
    print('toy' + 6)
except Exception as e:
    logging.error("例外が発生しました", exc_info=True)

また、logger = logging.getLogger(__name__)のようにモジュールごとに専用のロガーを作成すれば、大規模なアプリケーションでもログの出力先やレベルを柔軟に管理でき、例外の追跡が格段にしやすくなります。

  1. Tkinterでテーブルにデータを表示する最良の方法!Treeviewウィジェットの使い方を解説

    はじめに:データを表形式で表示するには 一般的に、データは表形式で表現されます。表は行と列の集合で構成され、データは行・列ごとに順序立てて格納されます。 例えば、学生情報を管理するTkinterアプリケーションを開発しているとしましょう。表の構造は、学生の「名前(First Name)」「苗字(Last Name)」「学籍番号(Roll No)」を保存するための3つの列で構成されます。 このような表形式のデータを表示する場合、Tkinterが提供する ttk.Treeview ウィジェットを使うのが最もシンプルかつ効果的な方法です。Treeviewを使えば、複数の行と列からなるデータを簡単に表

  2. 重複ファイルを管理する最良の方法とは?初心者向け徹底ガイド

    大容量HDDの時代でも、重複ファイルは悩みの種最近のパソコンには大容量のハードディスクが搭載されており、動画や音楽ファイル、数百枚に及ぶ写真など、さまざまなデータを自由に保存できます。しかし、どれほど大容量であっても、いつか必ず空き容量が尽きてしまうものです。そんなとき、慌ててプログラムをアンインストールする必要はありません。まず試すべきなのは、重複ファイルの整理と管理です。重複ファイルとは何か?ハードディスクにファイルを保存している限り、重複ファイルは避けて通れません。気づかないうちに少しずつ蓄積していきます。例えば、デジカメやスマートフォンの写真をパソコンに取り込む際、同じ写真を別々のフォ