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

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

参考:ログレコード属性

Please follow and like us:

コメント

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