LoginSignup
1
2

Python loggingモジュール使用方法

Posted at

コンソール出力

コード
import logging

logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')

logging.debug('これはデバッグメッセージです')
logging.info('これは情報メッセージです')
logging.warning('これは警告メッセージです')
logging.error('これはエラーメッセージです')
logging.critical('これは致命的なエラーメッセージです')
出力
2024-03-17 18:09:55,797 - DEBUG - これはデバッグメッセージです
2024-03-17 18:09:55,797 - INFO - これは情報メッセージです
2024-03-17 18:09:55,797 - WARNING - これは警告メッセージです
2024-03-17 18:09:55,797 - ERROR - これはエラーメッセージです
2024-03-17 18:09:55,797 - CRITICAL - これは致命的なエラーメッセージです

Pythonスクリプトを書いた際に変数の確認にprintで確認するとコードが長い場合、どの部分のprintか分からなくなるので、loggingモジュールでlinenoオプションを使用して行数を表示するとコードのデバッグ時に便利

コード(linenoオプションを追加)
import logging

logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(lineno)d - %(message)s')

logging.debug('これはデバッグメッセージです')
logging.info('これは情報メッセージです')
logging.warning('これは警告メッセージです')
logging.error('これはエラーメッセージです')
logging.critical('これは致命的なエラーメッセージです')
出力
2024-03-17 18:10:16,004 - DEBUG - 5 - これはデバッグメッセージです
2024-03-17 18:10:16,004 - INFO - 6 - これは情報メッセージです
2024-03-17 18:10:16,004 - WARNING - 7 - これは警告メッセージです
2024-03-17 18:10:16,004 - ERROR - 8 - これはエラーメッセージです
2024-03-17 18:10:16,004 - CRITICAL - 9 - これは致命的なエラーメッセージです

メッセージの出力が不要になった場合、basicConfiglevelを変更すればそのレベル以下のメッセージは表示されなくなる。

コード(level=logging.CRITICALnに変更)
import logging

logging.basicConfig(level=logging.CRITICAL, format='%(asctime)s - %(levelname)s - %(lineno)d - %(message)s')

logging.debug('これはデバッグメッセージです')
logging.info('これは情報メッセージです')
logging.warning('これは警告メッセージです')
logging.error('これはエラーメッセージです')
logging.critical('これは致命的なエラーメッセージです')
出力
2024-03-17 18:10:39,807 - CRITICAL - 9 - これは致命的なエラーメッセージです

ログファイル出力

メッセージをログファイルに出力したい場合は、filenameを指定する
※コンソールには出力されない

コード(ファイル出力)
import logging

logging.basicConfig(level=logging.CRITICAL, format='%(asctime)s - %(levelname)s - %(lineno)d - %(message)s', filename='debug.log')

logging.debug('これはデバッグメッセージです')
logging.info('これは情報メッセージです')
logging.warning('これは警告メッセージです')
logging.error('これはエラーメッセージです')
logging.critical('これは致命的なエラーメッセージです')
出力
なし

コンソールとログファイルの両方に出力

ロガーにハンドラーを追加する

コード(コンソールとログファイルの両方に出力)
import logging

logging.basicConfig(level=logging.CRITICAL, format='%(asctime)s - %(levelname)s - %(lineno)d - %(message)s', filename='debug.log')

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

# フォーマッターの設定
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(lineno)d - %(message)s')
console_handler.setFormatter(formatter)

# ロガーにハンドラーを追加
logging.getLogger().addHandler(console_handler)

logging.debug('これはデバッグメッセージです')
logging.info('これは情報メッセージです')
logging.warning('これは警告メッセージです')
logging.error('これはエラーメッセージです')
logging.critical('これは致命的なエラーメッセージです')
出力
2024-03-17 18:44:01,973 - CRITICAL - 19 - これは致命的なエラーメッセージです
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2