3

現在の時間ではなく、スクリプトが開始されたときに費やした時間を表示するようにPythonロギングモジュールを変更する方法を探しています。

4

3 に答える 3

1

サブクラス化logging.Formatterして再実装できformatTimeます。そんな感じ:

start_time = datetime.now()

class MyFormatter(logging.Formatter):

    def formatTime(self, record, datefmt=None):
        delta = (datetime.now() - start_time).total_seconds()
        return "{}".format(delta)

その後:

handler = logging.StreamHandler()
fmt = MyFormatter('%(filename)s %(levelname)-8s [%(asctime)s]  %(message)s')
handler.setFormatter(fmt)

log = logging.getLogger('main')
log.addHandler(handler)
log.debug("=)")
于 2013-03-18T16:54:15.503 に答える
1

あなたはこのようなことを試すことができます。

スクリプトの最初にカスタムフォーマッターを定義します。

import time
import logging
import datetime as dt

class MyFormatter(logging.Formatter):

    def __init__(self,fmt=None,datefmt=None):
        super(MyFormatter,self).__init__(fmt,datefmt)
        self.reftime = dt.datetime.fromtimestamp(time.mktime(time.localtime()))

    def formatTime(self, record, datefmt=None):
        ctime = dt.datetime.fromtimestamp(time.mktime(self.converter(record.created)))
        ct = (ctime - self.reftime).timetuple()
        if datefmt:
            s = time.strftime(datefmt, ct)
        else:
            t = time.strftime("%Y-%m-%d %H:%M:%S", ct)
            s = "%s,%03d" % (t, record.msecs)
        return s

次に、ロギングシステムをセットアップします。

handler = logging.StreamHandler(MyFormatter())
logger = logging.getLogger()
logger.addHandler(handler)

等...

于 2013-03-18T16:55:43.773 に答える
1

ドキュメント%(relativeCreated)sに示されているように、フォーマット文字列で使用します。

更新:通常の Python 形式指定子を使用して精度を制御できます。たとえば%(relativeCreated).0f、浮動小数点値を小数点以下 0 桁で表示できます。

于 2013-04-26T19:08:08.650 に答える