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)

ETC...

于 2013-03-18T16:55:43.773 回答
1

如文档%(relativeCreated)s中所示,在您的格式字符串中使用。

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

于 2013-04-26T19:08:08.650 回答