Python

Pythonでコンソールとファイルにログを出力する方法

アイキャッチ_LOGGING

Pythonにはログを出力する『logging』モジュールがあります。

この記事では『logging』モジュールを使用してコンソールおよびファイルの両方に

ログを出力する方法について紹介します。

ログ出力方法

コンソールとファイルにログを出力するにはLoggerオブジェクトに

「コンソール出力用のハンドラー」と「ファイル出力用のハンドラー」を設定します。

サンプルコード

import logging

# ロガーオブジェクトを生成
logger = logging.getLogger(__name__)
# ログレベル(logger)
logger.setLevel(logging.DEBUG)

# ハンドラーを生成する(コンソール)
stream_handler = logging.StreamHandler()
# ログレベル(handler)
stream_handler.setLevel(logging.DEBUG)
# ログフォーマット
stream_handler.setFormatter(logging.Formatter('%(asctime)s [%(levelname)s] %(filename)s %(message)s'))
# ハンドラーを設定
logger.addHandler(stream_handler)

# ハンドラーを生成する(ファイル)
file_handler = logging.FileHandler('C:\\Python\\logging\\logging_test.log')
# ログレベル(handler)
file_handler.setLevel(logging.DEBUG)
# ログフォーマット
file_handler.setFormatter(logging.Formatter('%(asctime)s [%(levelname)s] %(filename)s %(message)s'))
# ハンドラーを設定
logger.addHandler(file_handler)

# ログ出力
logger.debug('debuglevelmessage')
logger.info('infolevelmessage')
logger.warning('warninglevelmessage')
logger.error('errorlevelmessage')
logger.critical('criticallevelmessage')

コードの解説

1行目~6行目:Loggerオブジェクトを生成

Loggerオブジェクトを生成して、ログレベルを設定します。

import logging

# ロガーオブジェクトを生成
logger = logging.getLogger(__name__)
# ログレベル(logger)
logger.setLevel(logging.DEBUG)

8行目 ~15行目:ハンドラーを生成(コンソール出力用)

コンソール出力用のハンドラーを生成します。

コンソールへの出力は『StreamHandler()』を使用します。

# ハンドラーを生成する(コンソール)
stream_handler = logging.StreamHandler()
# ログレベル(handler)
stream_handler.setLevel(logging.DEBUG)
# ログフォーマット
stream_handler.setFormatter(logging.Formatter('%(asctime)s [%(levelname)s] %(filename)s %(message)s'))
# ハンドラーを設定
logger.addHandler(stream_handler)

17行目 ~24行目:ハンドラー生成(ファイル出力用)

ファイル出力用のハンドラーを生成します。

ファイルへの出力は『FileHandler(出力ファイル名)』を使用します。

# ハンドラーを生成する(ファイル)
file_handler = logging.FileHandler('C:\\Python\\logging\\logging_test.log')
# ログレベル(handler)
file_handler.setLevel(logging.DEBUG)
# ログフォーマット
file_handler.setFormatter(logging.Formatter('%(asctime)s [%(levelname)s] %(filename)s %(message)s'))
# ハンドラーを設定
logger.addHandler(file_handler)

26行目 ~ 31行目:ログへの出力

『Loggerオブジェクト.ログレベル(出力メッセージ)』でコンソールとファイルの

両方へ出力されます。

# ログ出力
logger.debug('debuglevelmessage')
# 出力結果:2022-04-12 12:36:14,124 [DEBUG] test_logging.py debuglevelmessage

logger.info('infolevelmessage')
# 出力結果:2022-04-12 12:36:14,128 [INFO] test_logging.py infolevelmessage  

logger.warning('warninglevelmessage')
# 出力結果:2022-04-12 12:36:14,130 [WARNING] test_logging.py warninglevelmessage

logger.error('errorlevelmessage')
# 出力結果:2022-04-12 12:36:14,132 [ERROR] test_logging.py errorlevelmessage

logger.critical('criticallevelmessage')
# 出力結果:2022-04-12 12:36:14,134 [CRITICAL] test_logging.py criticallevelmessage

ログレベルについて

ログレベルは5段階となっています。

次の表で下に向かうほど深刻なメッセージとなります。

DEBUG 開発中などに動作を検証する時に出力するレベル
INFO 正常な動作をしている時に出力するレベル
WARNING 問題が発生する可能性を警告する時に出力するレベル
ERROR 問題が発生した時の出力するレベル
CRITICAL 致命的なエラーが発生した際に出力するレベル
 

ログフォーマット

今回、使用したログフォーマットの内容は次の通りです。

%(asctime)s
ログを出力した時刻
出力例:2022-04-12 12:36:14,124
%(levelname)s
ログレベル
出力例:DEBUG、INFOなど
%(filename)s
ファイル名
%(message)s
ログ出力メッセージ