Pythonを使ったロギングの機能をさらに見ていきましょう。
フォーマッタ、ロガーに続いて、ここではハンドラ(handler)を扱います。
ハンドラは、プログラムの中に実装されメモリ上に展開されますが、通常のプログラムの処理の流れには乗らすに待機した状態となります。そのハンドラが対応すべき処理要求が発生した時にプログラムの流れを中断してハンドラが要求された処理を実行します。
ロギングのハンドラは、ロガーによって生成された)ログ記録を適切な送信先に送る処理になります。
ハンドラの処理
ハンドラにはいろいろな種類があります。公式ドキュメントなどでどんなハンドラがあるのが見ておくと良いでしょう。
この中の一つのFileHander()を扱っていきます。
ここでは、ロガーの項目で扱ったコードを利用してハンドラを見ていきましょう。
メインで行う処理はこちらになります。(ファイル名を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)を扱いました。
ハンドラは、対応すべき処理要求が発生した時にプログラムの流れを中断して要求された処理を実行するものです。ロギングのハンドラは、ロガーによって生成された)ログ記録を適切な送信先に送る処理を行います。
ハンドラはいろいろなものがありますので、公式ドキュメントなどで確認しておきましょう。