2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonでのロギング:logging モジュールの基本と応用

Posted at

概要

Pythonの標準ライブラリである logging モジュールは、プログラムの実行中に詳細な情報を記録するための強力なツールです。特に、デバッグや運用中のエラー検出、情報のトレースに役立ちます。この記事では、現場で使用しているlogging の基本的な使い方をメモします。

目次

  • logging とは?
  • 基本的な使い方
  • ログをファイルに保存する方法
  • ログフォーマットのカスタマイズする方法
  • 複数ファイルにログを分ける方法

logging とは?

logging モジュールは、Pythonでログメッセージを生成し、コンソールやファイルに出力するための方法です。print() を使ったデバッグよりもはるかに使い勝手が良く、レベルごとにメッセージを整理したり、ログのフォーマットや出力先をカスタマイズできる点が特徴です。

基本的な使い方

logging モジュールを使ってログを出力する基本的な方法です。

import logging

# ログの基本設定
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

# ログの出力例
logging.debug('デバッグ情報')
logging.info('情報メッセージ')
logging.warning('警告メッセージ')
logging.error('エラーメッセージ')
logging.critical('致命的なエラーメッセージ')
  • logging.basicConfig(): ログの設定を行うメインの関数です。ここでログのレベルやフォーマットを指定します。
  • ログレベル: DEBUG, INFO, WARNING, ERROR, CRITICAL の5つのログレベルがあり、これに応じてメッセージの重要度が変わります。
    • DEBUG: 開発やデバッグ時に役立つ詳細な情報
    • INFO: 通常の動作に関する情報
    • WARNING: 注意すべき動作や状況に関する警告
    • ERROR: エラー発生時のメッセージ
    • CRITICAL: プログラムの継続が危ぶまれる重大なエラー

ログをファイルに保存する

コンソールに表示されるだけでなく、ログをファイルに記録することができます。ファイルへの出力は、basicConfig() の filename パラメータを使って設定します。

import logging

# ログをファイルに保存する設定
logging.basicConfig(filename='app.log', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

# ログの出力例
logging.info('ファイルに保存されるログメッセージ')
logging.warning('警告メッセージもファイルに保存されます')

結果

このコードを実行すると、app.log というファイルにログメッセージが保存されます。ファイルは以下のような形式で出力されます。

2024-10-05 10:00:00,000 - INFO - ファイルに保存されるログメッセージ
2024-10-05 10:00:01,000 - WARNING - 警告メッセージもファイルに保存されます

ログフォーマットのカスタマイズ

logging では、出力されるログメッセージのフォーマットも自由にカスタマイズ可能です。basicConfig() で format パラメータを指定して、ログのフォーマットを設定します。

import logging

# フォーマットをカスタマイズ
logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s - [%(asctime)s]')

# ログの出力例
logging.info('フォーマットがカスタマイズされたログ')

結果

上記の例では、ログレベルとメッセージの後にタイムスタンプを表示するフォーマットを指定しています。

INFO: フォーマットがカスタマイズされたログ - [2024-10-05 10:05:00,000]
  • %(levelname)s: ログレベル(INFO, WARNING など)
  • %(message)s: 実際のログメッセージ
  • %(asctime)s: 日時

複数ファイルにログを分ける

大規模なシステムでは、エラー用のログファイルと、さらに詳細なエラー情報などとログファイルを分けて管理することが推奨されます。これを実現するには、複数のハンドラーを使ってログの振り分けを行います。

import logging

# ロガーの作成
logger = logging.getLogger('my_app')

# エラーログ用のハンドラー
error_handler = logging.FileHandler('error.log')
error_handler.setLevel(logging.ERROR)

# 通常のログ用ハンドラー
info_handler = logging.FileHandler('info.log')
info_handler.setLevel(logging.INFO)

# フォーマットの設定
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
error_handler.setFormatter(formatter)
info_handler.setFormatter(formatter)

# ロガーにハンドラーを追加
logger.addHandler(error_handler)
logger.addHandler(info_handler)

# ログの出力
logger.info('これはINFOレベルのメッセージです')
logger.error('これはERRORレベルのメッセージです')
  • info.log には INFO 以上のメッセージが記録されます。
  • error.log には ERROR 以上のメッセージが記録されます。

loggerの使用法は現場により異なり、さらに複雑な記述で使用されていると思いますが、基本的なloggerの使用法は上記となるはずです。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?