Pythonで自作ロガーを作ってみる
皆さん
こんにちは、こんばんは
TomoProgです。
毎日ブログと言いながら、7日目にして早くも更新出来ず・・・。
これからは毎日ではないかもしれませんが、ぼちぼち続けてみようと思います。
今日はPythonで自作ロガーを作ってみました。
自作ロガーの仕様を考える
まずは自作ロガーの仕様を考えてみました。
- 任意のファイル名でログファイルを作成する。
- ログファイルの内容はタイムスタンプ(年/月/日 時:分:秒)、ログ出力したモジュール名、ログ出力した行番号、任意のログメッセージを出力する。
こんな感じのロガーを作ってみたいと思います。
タイムスタンプを作成してみる
Pythonのタイムスタンプはdatetimeモジュールを使うと簡単に作成出来ます。
Pythonのインタラクティブシェルで実行してみました。
>>> import datetime >>> datetime.datetime.now() datetime.datetime(2016, 2, 7, 22, 11, 53, 409478) >>> datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S") '2016/02/07 22:12:19'
datetime.now()で現在のシステム日時の情報をdatetime型で取得出来ます。
また、strftimeを使用することで、フォーマットを指定してシステム日時を取得できます。
モジュール名、行番号を取得する
以下のサイトを参考に取得してみます。
stackoverflow.com
inspectモジュールでスタックフレームを解析するとモジュール名、行番号が取得出来るみたいです。
自作ロガー完成
タイムスタンプ、モジュール名、行番号を取得する方法が分かったので、早速作ってみました。
#-*- coding:utf-8 -*- import datetime import inspect class Logger(): """ 自作ロガー """ def __init__(self, filepath): """ Content: コンストラクタ Param: 1. filepath: ファイルパス """ self.__filepath = filepath def write(self, msg): """ Content: 書き込みメソッド Param: 1. msg: 出力メッセージ """ # スタックフレーム解析 stack_frame = inspect.stack()[1] frame = stack_frame[0] info = inspect.getframeinfo(frame) # ログファイル内容作成 linetxt = "" linetxt += datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S ") linetxt += (info.filename + " ") linetxt += (str(info.lineno) + " ") linetxt += msg linetxt += "\n" # ログファイルに書き込む with open(self.__filepath, "a") as f: f.write(linetxt)
クラス化して他のモジュールから呼び出せるようにしました。
引数に作成するログファイル名を指定し、writeメソッドで任意のメッセージを書き込みます。
自作ロガーを別モジュールから呼び出してみる
sample.pyモジュールから自作ロガーを呼び出した結果がコチラ
#-*- coding:utf-8 -*- import logger log = logger.Logger("abc.txt") log.write("samplesamplesample")
実行結果: ・作成ファイル abc.txt ・ファイル内容 2016/02/07 23:01:43 sample.py 6 samplesamplesample
なんとか仕様を満たした自作ロガーが完成できました。
結構便利なものが出来たかなと思います。
それではまた明日。
TomoProg