如何记录脚本启动时花费的时间而不是使用python日志记录模块时的实际时间?

时间:2013-03-18 16:28:48

标签: python logging

我正在寻找一种方法来更改python日志记录模块,以显示脚本启动时花费的时间而不是当前时间。

3 个答案:

答案 0 :(得分: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("=)")

答案 1 :(得分: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)

等...

答案 2 :(得分:1)

在格式字符串中使用%(relativeCreated)s,如the documentation

所示

更新:您可以使用普通的Python格式说明符来控制精度,例如%(relativeCreated).0f显示小数点为零的浮点值。