読者です 読者をやめる 読者になる 読者になる

TomoProgの技術書

底辺プログラマーが達人プログラマーになるまで

Pythonで自作ロガーを作ってみる

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