【コピペOK】Pythonのログ出力クラスを作ってみました by logging

当ページのリンクには広告が含まれています。

Pythonにはログ出力のライブラリとして logging が用意されています。

この logging は様々なフォーマットや出力先に対応しているため、それなりの設定が必要となります。

詳しいことはこちらの記事に記載していますので、興味のある方はご一読頂くとして、この記事では logging を簡単に使えるようにするためのクラスについて紹介したいと思います。

コピペで簡単に使えますので、サクっとログ出力機能を自作プログラムに追加したい場合は、是非ご利用下さい。

目次

使い方

今回作成したクラスには LogMan という名前を付けました。

使い方は、次の通り LogMan() でインスタンスを生成し、後は必要なログレベルのメソッドを呼ぶだけです。

LogMan() には、次の引数を指定できます。

  LogMan(filename=ログファイル名,level=出力レベル,stdout=True/False)

引数から分かる通り、ログの出力先はファイルで、stdout をTrueにすることで、同じ内容を標準出力にも出力するようになっています。

以下がサンプルになります。

結果は次の通りです。

例外発生時に critical メソッドを呼ぶと、NoneType:None の部分に詳細メッセージが記録されます。

出力レベルを設定する場合は、 LogMan(level=出力レベル) か、もしくは setLevel(出力レベル) を用います。

出力結果は次の通りです。

出力レベルに logging.INFO を設定したので、デバッグのメッセージが表示されなくなりましたね。

尚、LogMan() で filename 引数を省略した場合、下図のフォルダにログを出力します。

また、ログファイル名は __file__ から取得しているので、プログラム毎にログファイルが出来上がります。

もし全てのプログラムのログを1つのファイルに出力したい場合は、 filename を必ず指定してください。

リファレンス

LogManクラスには以下のメソッドが用意されています。

メソッド名内容引数
__init__() コンストラクタ filename:str
     ログファイルのフルパス
format:str
     ログの出力フォーマット
level:int
    ログの出力レベル
stdout:bool
    ログを標準出力に出力するか否かの設定
True:出力する False:出力しない
set_handler() ハンドラの登録 filename:str
     ログファイルのフルパス
format:str
     ログの出力フォーマット
tdout:bool
    ログを標準出力に表示するか否かの設定
setLevel() 出力レベルの設定 leven:int
エラーレベルの指定
(DEBUG=10、INFO=20、
WARINNG=30、 ERROR=40、
CRITICAL=50)
info() インフォメーションの出力 message:str
  ログに出力するメッセージ
error() エラーの出力 message:str
  ログに出力するメッセージ
exceptionエラーの出力
(例外時の詳細メッセージ付き)
message:str
  ログに出力するメッセージ
warning 警告の出力 message:str
  ログに出力するメッセージ
debug デバッグ情報の出力 message:str
  ログに出力するメッセージ

クラスのソースコード

下記がLogManのソースコードです。

このままコピペしてお使いいただけます。

あとは、ご自身の用途に合わせてカスタマイズして下さい。

filename 省略時にログが出力されるフォルダを変更したい場合は、以下の部分を書き換えて下さい。

__get_parent () でプログラムが置かれているフォルダの1つ上を取得していますが、プログラムと同じフォルダに出力したい場合は、 folder = os.path.dirname( __file__ ) と書き換えればOKです。

まとめ

今回は logging を簡単に使えるようになるクラスを紹介しました。

一般的には、ログの出力先はファイルであり、たまに標準出力に同じものを出力するケースが多いので、そういう用途に限定することでクラスの仕様を単純化し、使いやすくしています。

ログの出力フォルダは状況によって変わると思いますので、その部分は適宜修正をお願いします。

今回の記事が、皆様の何らかのヒントになれば光栄です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次