【Python】ロギングのハンドラで要求された処理の実行

Pythonの応用
スポンサーリンク

Pythonを使ったロギングの機能をさらに見ていきましょう。

フォーマッタ、ロガーに続いて、ここではハンドラ(handler)を扱います。

ハンドラは、プログラムの中に実装されメモリ上に展開されますが、通常のプログラムの処理の流れには乗らすに待機した状態となります。そのハンドラが対応すべき処理要求が発生した時にプログラムの流れを中断してハンドラが要求された処理を実行します。

ロギングのハンドラは、ロガーによって生成された)ログ記録を適切な送信先に送る処理になります。

スポンサーリンク

ハンドラの処理

ハンドラにはいろいろな種類があります。公式ドキュメントなどでどんなハンドラがあるのが見ておくと良いでしょう。

logging.handlers --- ロギングハンドラ
ソースコード: Lib/logging/handlers.py Important: このページには、リファレンス情報だけが含まれています。チュートリアルは、以下のページを参照してください 基本チュートリアル, 上級チュートリアル, ロギン...

この中の一つのFileHander()を扱っていきます。

ここでは、ロガーの項目で扱ったコードを利用してハンドラを見ていきましょう。

【Python】ロギングのロガーで特定の処理のログ設定を変更する
Pythonを使ったロギングの機能について、ここではロガー(logger)を扱います。basicConfig()を使ってログレベルを設定したあとで、ロガーを使ってログレベルの設定を引き継ぎながら、特定の処理のログレベルの設定を変更します。

メインで行う処理はこちらになります。(ファイル名をlogging_lesson.pyとしています)

import logging

import testlogger

logging.basicConfig(level=logging.INFO)

logger = logging.getLogger(__name__)
logger.info('from main')

testlogger.do_something()

このコードはそのままです。

ハンドラは、別ファイルでロガーの処理を記述したコードに加えていきます。(ファイル名をtestlogger.pyとしています)

import logging


logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

test_handler = logging.FileHandler('testlog.log')
logger.addHandler(test_handler)

def do_something():
    logger.info('from testlogger info')
    logger.debug('from testlogger debug')

ロガーで扱った時のコードとの違いは、FileHandler()で出力するファイルを指定してハンドラを設定します。ファイルを指定したディレクトリに出力するのであれば適切なパスも記述します。これをaddHandler()に渡しています。

ここでメインのファイルをターミナルから実行するとこうなります。

コンソールに実行結果が表示されています。これ自体はロガーで扱った内容と同じです。

この時、作業ディレクトリにtestlog.logファイルが合わせて出力されているはずです。

このファイルを開いて見るとこうなります。

ロギングでmainの処理からファイル出力した時との違いがわかるでしょうか。

コンソールには全ての処理が出力されていますが、ここでのファイル出力ではハンドラで処理した部分のみがログとして出力されています。

スポンサーリンク

まとめ

Pythonを使ったロギングの機能について、ここではハンドラ(handler)を扱いました。

ハンドラは、対応すべき処理要求が発生した時にプログラムの流れを中断して要求された処理を実行するものです。ロギングのハンドラは、ロガーによって生成された)ログ記録を適切な送信先に送る処理を行います。

ハンドラはいろいろなものがありますので、公式ドキュメントなどで確認しておきましょう。

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