[Python] ログ出力フォーマットを設定するには?

Python logging
Python
スポンサーリンク

Python の logging では、Formatter を使用することで、さまざまな情報を付加して、よりわかりやすいログを出力することができます。

今回は、この Formatter の使用方法について説明します。

環境

Python 3.9.1

VSCode1.52.1

ログ出力時のフォーマットを設定する

ログ出力時のフォーマットを設定するには、冒頭でも説明した通り Formatter を使用します。

以下にサンプルコードを示します。

ログ出力フォーマットのサンプルコード

import logging
import logging.handlers

# ロガーを取得
log = logging.getLogger(__name__)
# ログ出力レベルの設定
log.setLevel(logging.DEBUG)

# ローテーティングファイルハンドラを作成
rh = logging.handlers.RotatingFileHandler(
        r'./log/app.log', 
        encoding='utf-8',
        maxBytes=1000,
        backupCount=3
    )
# ログ出力レベルの設定
rh.setLevel(logging.DEBUG)

# ログ出力のフォーマットを作成
rh_formatter = logging.Formatter('%(asctime)s : %(levelname)s - %(filename)s - %(message)s')
# 作成したフォーマットをフォーマッタに設定
rh.setFormatter(rh_formatter)

# ロガーに追加
log.addHandler(rh)

# ログの出力
log.debug('デバッグです')
log.info('インフォメーションです')
log.warning('警告です')
log.error('エラーです')
log.critical('重大なエラーです')

1〜17行目は、ログのファイルローテーティング設定です。詳細は「[Python] ログのファイル出力とログローテーション」の記事を参照してください。

20行目が、ログ出力時のフォーマットを設定しているコードです。「%(xxx)s」という文字列が並んでいますが、それぞれ、ログ出力時刻、ログレベル、ログを出力したファイル名、メッセージ、に置換されます。

22行目は、20行目で作成したログ出力時のフォーマットをフォーマッタに設定しています。

23行目は、22行目で作成したフォーマッタをロガーに追加して、使用可能状態にします。

あとはログが出力されるごとに、設定されたフォーマットが適用されます。

出力されたログのサンプルを以下に示します。

app.log

2021-01-03 16:28:04,611 : DEBUG - loggingSample.py - デバッグです
2021-01-03 16:28:04,611 : INFO - loggingSample.py - インフォメーションです
2021-01-03 16:28:04,612 : WARNING - loggingSample.py - 警告です
2021-01-03 16:28:04,612 : ERROR - loggingSample.py - エラーです
2021-01-03 16:28:04,612 : CRITICAL - loggingSample.py - 重大なエラーです

 

使用可能なログ出力フォーマット文字列

以下に、使用可能なログ出力フォーマット文字列を示します。

フォーマット 説明
%(asctime)s ログの出力時刻
%(created)f ログ出力時刻(time.time()によって返される形式)
%(filename)s pathname のファイル名部分。
%(funcName)s ロギングの呼び出しを含む関数の名前。
%(levelname)s メッセージのための文字のロギングレベル (‘DEBUG’, ‘INFO’, ‘WARNING’, ‘ERROR’, ‘CRITICAL’)。
%(levelno)s メッセージのための数値のロギングレベル (DEBUG, INFO, WARNING, ERROR, CRITICAL)。
%(lineno)d ロギングの呼び出しが発せられたソース行番号 (利用できる場合のみ)。
%(message)s msg % args として求められた、ログメッセージ。
Formatter.format が呼び出されたときに設定されます。
%(module)s モジュール (filename の名前部分)。
%(msecs)d LogRecord が生成された時刻のミリ秒部分
%(name)s ロギングに使われたロガーの名前。
%(pathname)s ロギングの呼び出しが発せられたファイルの完全なパス名 (利用できる場合のみ)。
%(process)d プロセス ID (利用可能な場合のみ)。
%(processName)s プロセス名 (利用可能な場合のみ)。
%(relativeCreated)d logging モジュールが読み込まれた時刻に対する、LogRecord が生成された時刻を、ミリ秒で表したもの。
%(thread)d スレッド ID (利用可能な場合のみ)。
%(threadName)s スレッド名 (利用可能な場合のみ)。

参考:ログレコード属性

Please follow and like us:

コメント

タイトルとURLをコピーしました