【初心者向け】Zaif API×Pythonでプチフィンテック14 ログ出力処理の実装1

今回と次回の2回に分けて、前回の予告通り、処理の過程をコンソールに表示するためのログ出力処理について解説していきます。

<スポンサーリンク>

ログとは?

「ログ」という言葉を聞かれたことのある方は多いと思いますが、端的に言うと処理の記録や履歴のことを指します。

例えば、前回紹介したプログラムを少し修正してログを出力するようにした場合、コンソールに以下のように、処理が進むにつれて処理状況を表すメッセージが表示されます。

Pythonでは、loggingというモジュールを使用することにより、ログ出力を比較的簡単に実装することができます。

loggingモジュールを使うメリット

前述の例を見た際、「わざわざloggingモジュールではなく、print関数を使ってメッセージを出力した方が簡単なのでは?」と考えられる方もいらっしゃると思います。

しかしながらloggingモジュールを利用すると、以下のようなメリットがあります。

■出力するログのフォーマットを統一することができる

例えば出力するログのフォーマットを、「[ログレベル] 時刻  :メッセージ」という形式にしたいとします。

ここでログレベルとは、INFOやERRORなど、出力したログの性質を表す種類で、主なものとしては以下があります。

ログレベル 定義
ERROR 処理が失敗した際に表示するログ
WARNING 処理は完了したが、プログラム利用者に留意してもらいたい事象が発生した場合に表示するログ
INFO 処理の開始/終了など、単純に処理の過程を表すログ
DEBUG プログラムの動作確認などに用いられる詳細なログ(開発者向け)

print関数を使った場合、関数を記載する都度、ログレベルや時刻などのフォーマットを指定する必要があります。そのため、ログ出力箇所が多くなる場合、コーディングミスによりフォーマットがばらけてしまう可能性があります。

一方、loggingモジュールを利用した場合、1箇所にフォーマットを定義しておけば、ログを出力する箇所ではそのフォーマットを使いまわすことができますので、フォーマットのバラつきを抑えることができます。

■ファイルへのログ出力も簡単に行える

本シリーズでは使用しませんが、コンソールの他にファイルにもログを出力したい場合があります。

loggingモジュールを用いない場合、print関数でコンソールへログ出力を行うと同時に、ファイルに文字列を書き出すためのモジュール/メソッドを利用して、出力処理をprint関数とは別の処理として記述する必要があります。

しかしながらloggingモジュールを用いると、1行でコンソールとファイルへの出力が可能です。

■コンソール/ファイルなどのチャネルごとに、出力するログ種類を簡単に変えることができる

ログをコンソールの他、ファイルにも出力する場合、それぞれの用途を分ける場合があります。

例えば、コンソールにはINFO以上のログ全てを表示し、プログラムの処理状況をリアルタイムで把握できるようにする一方、ファイルは後の異常解析に用いるためにWARNING以上のログのみを記録するなどの場合です。

loggingモジュールを用いない場合、WARNING以上に該当するログを出力する箇所にはコンソール出力とファイル書き出し両方の処理を記述する一方、INFOレベルのログを出力する箇所ではコンソール出力のみを記述することになり、管理が煩雑になります。

しかしながらloggingモジュールを用いる場合、予めコンソールはINFO以上、ファイルはWARNING以上と定義しておけば、ログ出力を1行で記載しても、ログレベルに応じて適切な出力先にログを出力することができます。

loggingモジュール利用の流れ

それでは、簡単にloggingモジュール利用の流れを示します。

①Loggerインスタンスの生成

ログ出力処理の土台となる、Loggerというものを生成します。

②デフォルトログレベルの設定

出力対象とするログレベルを設定します。なお、後段でコンソールやファイルなど、ログの出力チャネル毎に各種設定を行いますが、その設定の1つとしてチャネル毎の出力対象ログレベルを設定することができます。このチャネル毎のログレベルを設定しない場合、ここで設定したログレベルが自動的に採用されることになります。

③ログフォーマットの定義

ログの出力フォーマットを定義します。

④ログ用ハンドラーの生成とフォーマットの適用

コンソールやファイルなどのチャネル毎に、ログ出力操作を管理するハンドラーというものを生成します。また、このハンドラーに③で作成したフォーマットを結びつけることにより、指定したフォーマット通りにログが出力されるように設定します。

⑤Loggerインスタンスへハンドラーを紐付け

④で生成したハンドラーを①で生成したLoggerインスタンスに紐づけることにより、ハンドラーを有効化します。

⑥ログの出力

プログラム中のログを出力したい箇所に、ログを出力するためのコードを記述します。

終わりに

今回はログそのものを説明するとともに、Pythonでログ出力を行う際の手順を簡単に紹介しました。

次回はこの手順に基づき、ログを出力するプログラムを実際に作成していきたいと思います。

カテゴリ:フィンテック
<スポンサーリンク>

シェアする

フォローする