【Python】loggingの使い方メモ

■やること

logging.basicConfig()を使用して、「DEBUG」、「INFO」、「WARNING」、「ERROR」ログを出力する。

logging.basicConfig()は以下を設定する。

logging.basicConfig(filename='<ログファイル名>'
                    , level=<ログ出力レベル>
                    , format=<ログフォーマット>)

<ログ出力レベル>は以下の表のうち、「DEBUG」と「INFO」を使用して、違いを確認する。
※「ロギングレベル」より引用

レベル数値
logging.NOTSET0
logging.DEBUG10
logging.INFO20
logging.WARNING30
logging.ERROR40
logging.CRITICAL50

<ログフォーマット>の項目は以下の通りとする。

日付:[ログレベル]:[モジュール名]:[ファンクション名]:メッセージ
項目
日付(YYYY-MM-DD HH:MI:SS,FFF)asctime
ログレベルlevelname
モジュール名module
ファンクション名funcName
メッセージ(任意)message

■サンプルコード:DEBUG

import logging

# ログ出力フォーマットを設定
# 日付:[ログレベル]:[モジュール名]:[ファンクション名]:メッセージ
FORMMATER = '%(asctime)s:[%(levelname)s]:[%(module)s]:[%(funcName)s]:%(message)s'

# ログ出力サンプル関数
def logging_sample_fnc():
    # 処理開始
    logging.info('start: logging_sample_fnc')
    
    try:
        data1 = 1
        
        if data1 == 1:
            # debugレベルでdata1を出力
            logging.debug('data1 = %s', data1)
        
        data2 = 0
        
        if data2 != 1:
            # warningレベルでdata2を出力
            logging.warning('[different value] data2 = %s', data2)

        # 強制的に例外へ
        raise
    
    # 例外処理
    except :
        # errorレベルで出力
        logging.error('例外エラー')
    
    finally:
        # 処理終了
        logging.info('end: logging_sample_fnc')

if __name__ == '__main__':
    # DEBUGレベルでログ出力
    logging.basicConfig(filename='level_debug.log', level=logging.DEBUG, format=FORMMATER)
    logging_sample_fnc()

■実行結果:DEBUG

2023-09-10 10:09:01,837:[INFO]:[logging_sample]:[logging_sample_fnc]:start: logging_sample_fnc
2023-09-10 10:09:01,837:[DEBUG]:[logging_sample]:[logging_sample_fnc]:data1 = 1
2023-09-10 10:09:01,837:[WARNING]:[logging_sample]:[logging_sample_fnc]:[different value] data2 = 0
2023-09-10 10:09:01,837:[ERROR]:[logging_sample]:[logging_sample_fnc]:例外エラー
2023-09-10 10:09:01,837:[INFO]:[logging_sample]:[logging_sample_fnc]:end: logging_sample_fnc

■サンプルコード:INFO

logging.basicConfig()の[level]をINFOに変更。

import logging

# ログ出力フォーマットを設定
# 日付:[ログレベル]:[モジュール名]:[ファンクション名]:メッセージ
FORMMATER = '%(asctime)s:[%(levelname)s]:[%(module)s]:[%(funcName)s]:%(message)s'

# ログ出力サンプル関数
def logging_sample_fnc():
    # 処理開始
    logging.info('start: logging_sample_fnc')
    
    try:
        data1 = 1
        
        if data1 == 1:
            # debugレベルでdata1を出力
            logging.debug('data1 = %s', data1)
        
        data2 = 0
        
        if data2 != 1:
            # warningレベルでdata2を出力
            logging.warning('[different value] data2 = %s', data2)

        # 強制的に例外へ
        raise
    
    # 例外処理
    except :
        # errorレベルで出力
        logging.error('例外エラー')
    
    finally:
        # 処理終了
        logging.info('end: logging_sample_fnc')

if __name__ == '__main__':
    # INFOレベルでログ出力
    logging.basicConfig(filename='level_info.log', level=logging.INFO, format=FORMMATER)
    logging_sample_fnc()

■実行結果:INFO

DEBUGレベルのログが出力されなくなる。

2023-09-10 10:09:14,789:[INFO]:[logging_sample]:[logging_sample_fnc]:start: logging_sample_fnc
2023-09-10 10:09:14,789:[WARNING]:[logging_sample]:[logging_sample_fnc]:[different value] data2 = 0
2023-09-10 10:09:14,789:[ERROR]:[logging_sample]:[logging_sample_fnc]:例外エラー
2023-09-10 10:09:14,789:[INFO]:[logging_sample]:[logging_sample_fnc]:end: logging_sample_fnc

■参考

コメント