Python

loggingモジュールを使ってログの出力や確認をする

By 2021年9月14日No Comments

この記事では、Pythonのloggingモジュールのログの使い方について解説していきます。

loggingモジュールでログ出力をするとプログラムの正常時も異常時においても全体の処理の流れを掴む事ができます。

ログとはプログラムの実行中に起こった出来事の記録です。ログを残すことでバグが起きたときにエラーが発生した理由を特定していく事ができます。

ログに出力される種類をレベル分けをする事ができます。ログに出力される情報には使っている設定値や詳細な情報表示などのデバッグ用の表示をできたり正常動作の記録したり警告を出しておきたい動作の記録やエラーなどの問題の記録、停止してしまうような致命的なエラーをログ出力する事ができます。

ログに出力される種類のレベル分けは下記になります。

名前設定値役割
NOTSET0設定値などの記録(全ての記録)
DEBUG10DEBUGおもに問題を診断するときにのみ関心があるような、詳細な情報。
動作確認などデバッグの記録
INFO20想定された通りのことが起こったことの確認。正常動作の記録
WARNING30想定外のことが起こった、または問題が近く起こりそうである
(例えば、’disk space low’) ことの表示。ログの定義名
ERROR40より重大な問題により、ソフトウェアがある機能を実行できないこと。
エラーなど重大な問題
CRITICAL50プログラム自体が実行を続けられないことを表す、重大なエラー。
停止など致命的な問題

Pythonのloggingモジュールの使い方

それでは、Pythonでloggingモジュールを使っていきます。まずはインポートします。

import logging

ログレベルに応じたメソッドが用意されていますので、引数にログメッセージを指定してメソッドを実行します。

import logging

logging.warning('警告です')
logging.error('エラーが発生しました')

出力結果:

WARNING:root:警告です
ERROR:root:エラーが発生しました

警告とエラーのログを出力する事ができました。

loggingモジュールのgetLogger( )メソッドを使ってloggerオブジェクトを生成して引数に文字列を入れることでログの出力名を設定することができます。

import logging

# ログの出力名を設定
logger = logging.getLogger('ログテスト')

# ログをコンソールに出力するための設定
s = logging.StreamHandler()
logger.addHandler(s)

# log関数でログ出力処理
logger.log(20, 'ログ情報')
logger.log(30, '警告です')
logger.log(100, 'テスト')

実行結果:

警告です
テスト

log( )の第1引数には、ログレベルの数値を渡して第2引数にはメッセージとしてログに出力する文字列を入力する事ができました。StreamHandler( )クラスを使ってコンソールにログを出力するよう設定しています。

実行結果にログレベル20の出力が表示されていません。これはデフォルトの設定でログレベル20(INFO)以下は出力しないようになっているためです。

出力するログレベルを変更するにはsetLevel( )を使います。

import logging

# ログの出力名を設定
logger = logging.getLogger('ログテスト')

#ログレベルを設定
logger.setLevel(20)

#ログをコンソールに出力するための設定
s = logging.StreamHandler()

logger.addHandler(s)
logger.log(20, 'ログ情報')
logger.log(30, '警告です')
logger.log(100, 'テスト')

実行結果:

ログ情報
警告です
テスト

setLevel( )クラスで出力するログレベルを20(INFO)からに指定したのでログレベル20も出力されました。

setLevel( )は引数にログレベルの名前を直接指定することもできます。

import logging

# ログの出力名を設定
logger = logging.getLogger('ログテスト')

#ログレベル名を直接設定
logger.setLevel(logging.INFO)

#ログをコンソール出力するための設定
s = logging.StreamHandler()
logger.addHandler(s)
logger.log(20, 'ログ情報')
logger.log(30, '警告です')
logger.log(100, 'テスト')

出力結果:

ログ情報
警告です
テスト

このように出力するログレベルをsetLevel( )を使って変更する事ができました。

Pythonでログをファイルに出力する方法

FileHandler( )を使うとログファイルの出力先を設定する事ができます。

import logging

# ログの出力名を設定
logger = logging.getLogger('ログテスト')

# ログレベルの設定
logger.setLevel(10)

# ログのコンソール出力の設定
s = logging.StreamHandler()
logger.addHandler(s)

# ログのファイル出力先を設定
f = logging.FileHandler('sample.log')

logger.addHandler(f)
logger.log(20, 'ログ情報')
logger.log(30, '警告です')
logger.log(100, 'テスト')

出力結果:

ログ情報
警告です
テスト

新しく作ったファイル「sample.log」に出力結果が出力されている事が確認できます。このようにファイル名を指定しておくことにより、ログをコンソール画面だけでなくファイルに出力することができるようになります。

Pythonのログの出力形式を設定する方法

ログの出力形式を設定すると実行時刻やログの出力した場所、ログレベル名、メッセージなどをログ記録を一緒に出力する事ができます。ログの出力形式を設定するためにはFormatter( )クラスを使います。

import logging

# ログの出力名を設定
logger = logging.getLogger('ログテスト')

# ログレベルの設定
logger.setLevel(10)

# ログのコンソール出力の設定
s = logging.StreamHandler()
logger.addHandler(s)

# ログのファイル出力先を設定
f = logging.FileHandler('test.log')
logger.addHandler(f)

# ログの出力形式の設定
formatter = logging.Formatter('%(asctime)s:%(lineno)d:%(levelname)s:%(message)s')
f.setFormatter(formatter)
s.setFormatter(formatter)

logger.log(20, 'ログ情報')
logger.log(30, '警告です')
logger.log(100, 'テスト')

logger.debug('デバッグ')
logger.info('ログ情報')
logger.warning('警告です')
logger.error('エラー')

実行結果:

2021-09-10 12:20:25,485:22:INFO:ログ情報
2021-09-10 12:20:25,485:23:WARNING:警告です
2021-09-10 12:20:25,485:24:Level 100:テスト
2021-09-10 12:20:25,485:26:DEBUG:デバッグ
2021-09-10 12:20:25,485:27:INFO:ログ情報
2021-09-10 12:20:25,485:28:WARNING:警告です
2021-09-10 12:20:25,485:29:ERROR:エラー

Formatter( )クラスの引数に出力形式を「実行時間(年-月-日 時-分-秒,ミリ秒):行番号:ログレベル名:メッセージ文字列」の形式で出力されています。形式のフォーマットの種類は下記になります。

フォーマット役割
%(asctime)s実行時刻
%(filename)sファイル名
%(funcName)s行番号
%(levelname)sログの定義
%(lineno)dログレベル名
%(message)sログメッセージ
%(module)sモジュール名
%(name)s関数名
%(process)dプロセスID
%(thread)dスレッドID

まとめ

Pythonのloggingモジュールを使ってログの出力や確認をする事ができました。ログを確認する事によりどんな処理が実行されどのような結果になったかを確認することができトラブルが発生した時にどんなエラーがどの箇所で発生したかを把握する事ができます。

そして、ログの種類をレベル分けがしたりフォーマットを指定して統一化された出力の仕方ができます。以上、Pythonのloggingモジュールを使ってログの出力や確認する方法についてでした。

Udemyの動画学習でもPythonを勉強しよう!

「平日の夜の勉強会には時間が間に合わなくて参加できない」「通勤時間のわずかな隙間時間を勉強時間にあてたい」「本ではよく分からないところを動画で理解を深めたい」そんなあなたはUdemyの動画学習がお勧めです!

UdemyのPythonおすすめ33講座レビューリスト
HOSL

Author HOSL

More posts by HOSL