プログラミング

Python 3のログ記録ガイド

Python 3でのログ記録(Logging)の完全ガイド

Python 3でのログ記録(Logging)は、アプリケーションのデバッグやモニタリングに非常に役立つツールです。ログは、エラーの追跡、情報の出力、警告の表示、そしてシステムのステータスを記録するために使用されます。Pythonの標準ライブラリには、非常に強力で柔軟なログ記録モジュールが含まれており、これを使って効果的にアプリケーションの動作を監視することができます。

本記事では、Python 3でのログ記録の基本から応用まで、完全かつ包括的に解説します。


1. ロギングモジュールの基本

Pythonにはloggingという標準モジュールがあります。このモジュールを使用することで、プログラムの動作を詳細に記録したり、重要な情報やエラーメッセージをファイルに保存したりすることができます。

ログ記録の基本的な使い方

最も基本的な使い方は、ログメッセージをコンソールに表示する方法です。以下のコードは、loggingモジュールを使用して情報メッセージを表示する方法です。

python
import logging # ログの基本設定 logging.basicConfig(level=logging.DEBUG) # メッセージの出力 logging.debug("これはデバッグメッセージです") logging.info("これは情報メッセージです") logging.warning("これは警告メッセージです") logging.error("これはエラーメッセージです") logging.critical("これは重大なエラーメッセージです")

上記のコードでは、basicConfigを使用してログの出力レベルを設定しています。これにより、DEBUGレベル以上のメッセージが表示されるようになります。出力されるメッセージは以下のようになります。

less
DEBUG:root:これはデバッグメッセージです INFO:root:これは情報メッセージです WARNING:root:これは警告メッセージです ERROR:root:これはエラーメッセージです CRITICAL:root:これは重大なエラーメッセージです

level=logging.DEBUGに設定することで、すべてのログレベル(DEBUG、INFO、WARNING、ERROR、CRITICAL)が出力されます。


2. ログレベル

ログメッセージにはさまざまな重要度(レベル)があります。loggingモジュールでは、これらのレベルに基づいてメッセージを出力します。以下は、ログレベルとその意味です。

  • DEBUG: デバッグ用の詳細な情報。通常は開発中のみ使用されます。

  • INFO: 実行中の一般的な情報。ユーザーには重要ではないが、システムの動作を理解するために有用です。

  • WARNING: 予期しない動作があったが、プログラムは続行できる場合に使用します。

  • ERROR: プログラムにエラーが発生し、処理が完了できない場合に使用します。

  • CRITICAL: システム全体に重大な影響を与えるエラーの場合に使用します。

ログレベルは、basicConfiglevel引数を使って設定できます。例えば、level=logging.WARNINGに設定すれば、WARNING以上のメッセージのみが表示されます。


3. ログの出力先

ログはコンソールだけでなく、ファイルにも保存することができます。これにより、後でログを確認したり、長期間にわたるシステムの動作を分析したりすることができます。

ファイルへのログ出力

ログメッセージをファイルに出力するためには、filename引数を使用します。以下のコードは、ログをapp.logというファイルに保存する例です。

python
import logging # ログファイルに出力 logging.basicConfig(filename='app.log', level=logging.DEBUG) # メッセージの出力 logging.debug("デバッグメッセージ") logging.info("情報メッセージ") logging.warning("警告メッセージ") logging.error("エラーメッセージ") logging.critical("重大なエラーメッセージ")

このコードを実行すると、app.logというファイルが作成され、ログメッセージがそのファイルに書き込まれます。

ログファイルのローテーション

ログファイルが大きくなりすぎないように、定期的に新しいファイルに切り替えることができます。これを実現するために、logging.handlers.RotatingFileHandlerを使用します。

python
import logging from logging.handlers import RotatingFileHandler # ログファイルのローテーション設定 handler = RotatingFileHandler('app.log', maxBytes=2000, backupCount=5) logging.basicConfig(level=logging.DEBUG, handlers=[handler]) # メッセージの出力 logging.debug("デバッグメッセージ")

この設定では、app.logファイルのサイズが2000バイトを超えると、新しいファイルに切り替え、最大5個のバックアップファイルを保持します。


4. ログのフォーマット

ログメッセージにタイムスタンプやログレベル、メッセージ内容などの情報を追加したい場合、formatを設定することができます。以下は、ログのフォーマットをカスタマイズする方法です。

python
import logging # ログフォーマットの設定 logging.basicConfig( format='%(asctime)s - %(levelname)s - %(message)s', level=logging.DEBUG ) # メッセージの出力 logging.debug("デバッグメッセージ")

上記の設定では、ログメッセージにタイムスタンプとログレベルが含まれます。出力例は以下のようになります。

yaml
2025-03-28 12:34:56,789 - DEBUG - デバッグメッセージ

formatにはさまざまなプレースホルダーが使用できます。主なプレースホルダーは以下の通りです。

  • %(asctime)s: ログが記録された日時

  • %(levelname)s: ログレベル(DEBUG, INFO, WARNINGなど)

  • %(message)s: ログメッセージの内容

  • %(name)s: ロガーの名前

  • %(filename)s: 呼び出し元のファイル名

  • %(lineno)d: 呼び出し元の行番号


5. ロギングのハンドラー

Pythonのloggingモジュールでは、ログメッセージをさまざまな場所に送信するための「ハンドラー」を使用できます。主なハンドラーには以下のものがあります。

  • StreamHandler: コンソールにログを出力する

  • FileHandler: ファイルにログを出力する

  • RotatingFileHandler: ログファイルをローテーションして出力する

  • SMTPHandler: メールでログを送信する

  • SysLogHandler: syslogサーバにログを送信する

例えば、メールでエラーを通知したい場合、SMTPHandlerを使用してエラーメッセージをメールで送信することができます。

python
import logging from logging.handlers import SMTPHandler # メールによる通知設定 mail_handler = SMTPHandler( mailhost='smtp.example.com', fromaddr='[email protected]', toaddrs=['[email protected]'], subject='アプリケーションエラー' ) logging.basicConfig(level=logging.ERROR, handlers=[mail_handler]) # エラーメッセージの出力 logging.error("重大なエラーが発生しました")

6. カスタムロガーの作成

複数のモジュールでログを記録する場合、それぞれのモジュールに個別のロガーを作成することができます。これにより、ログの出力先やレベルをモジュールごとに調整することが可能になります。

python
import logging # カスタムロガーの作成 logger = logging.getLogger('my_module') # ログ設定 logger.setLevel(logging.DEBUG) # メッセージの出力 logger.debug("モジュールのデバッグメッセージ")

このように、getLoggerを使用してカスタムロガーを作成することができます。


結論

Python 3でのloggingモジュールは非常に柔軟で、さまざまなシーンで活用できます。基本的なログ出力から、ログファイルへの記録、さらにログのローテーションやカスタムロガーの作成まで、多くの機能が提供されています。これらの機能を適切に活用することで、アプリケーションのデバッグや監視が容易になり、開発者はより効率的に問題を特定して解決できるようになります。

Back to top button