見出し画像

【Python】printを卒業してloggingを使ってログ出力する

Pythonのloggingモジュールは、プログラムの実行中に発生する情報を記録するための強力なツールです。以下に、loggingモジュールの基本的な使い方から詳細な設定方法までを説明します。



1. 基本的な使い方

まず、loggingモジュールをインポートし、基本的なログメッセージを記録する方法を示します。

import logging

logging.basicConfig(level=logging.DEBUG)
logging.debug('デバッグメッセージ')
logging.info('情報メッセージ')
logging.warning('警告メッセージ')
logging.error('エラーメッセージ')
logging.critical('重大なエラーメッセージ')

basicConfig関数を使ってログの基本設定を行い、ログレベルを設定します。この例では、ログレベルをDEBUGに設定しています。


2. ログレベル

loggingモジュールには、以下の5つの標準ログレベルがあります。

  • DEBUG: 詳細な情報。通常、診断目的で使用される。

  • INFO: 一般的な情報。

  • WARNING: 注意が必要な状況。

  • ERROR: エラーが発生した状況。

  • CRITICAL: 重大なエラー。プログラムの実行が続行できない可能性がある。


3. ログの設定

ログの出力形式や出力先をカスタマイズするためには、basicConfig関数の引数を設定します。

logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S',
    handlers=[
        logging.FileHandler('app.log'),
        logging.StreamHandler()
    ]
)

上記の設定では、ログをファイル(app.log)とコンソールの両方に出力します。ログの形式や日時フォーマットも指定しています。


4. ロガーの使用

複数のモジュールでログを使用する場合、個別のロガーを作成して使用します。

logger = logging.getLogger(__name__)

logger.debug('デバッグメッセージ')
logger.info('情報メッセージ')
logger.warning('警告メッセージ')
logger.error('エラーメッセージ')
logger.critical('重大なエラーメッセージ')

getLogger関数を使って、モジュールごとに異なるロガーを作成できます。


5. ハンドラとフォーマッタ

より高度なログ設定を行うために、ハンドラとフォーマッタを使用します。

logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

# コンソールハンドラの作成
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)

# ファイルハンドラの作成
fh = logging.FileHandler('app.log')
fh.setLevel(logging.ERROR)

# フォーマッタの作成
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# ハンドラにフォーマッタを設定
ch.setFormatter(formatter)
fh.setFormatter(formatter)

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

# ログメッセージの記録
logger.debug('デバッグメッセージ')
logger.info('情報メッセージ')
logger.warning('警告メッセージ')
logger.error('エラーメッセージ')
logger.critical('重大なエラーメッセージ')

この例では、コンソールとファイルの両方にログを出力しますが、ファイルにはERRORレベル以上のメッセージのみを記録します。


6. まとめ

loggingモジュールを使用することで、printステートメントよりも柔軟で強力なログ機能を提供できます。ログレベル、フォーマット、出力先を自由に設定でき、複数のモジュールで一貫したログ管理が可能です。以上の設定例を参考に、プロジェクトに適したログ設定を行ってください。

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?