sorin
sorin

Reputation: 170638

How to log time spent from when script started instead of actual time when using python logging module?

I am looking for a way to change python logging module to display time spent form when the script started instead of current time.

Upvotes: 3

Views: 456

Answers (3)

Vinay Sajip
Vinay Sajip

Reputation: 99465

Use %(relativeCreated)s in your format string, as indicated in the documentation.

Update: You can use normal Python format specifiers to control precision, e.g. %(relativeCreated).0f to show floating point values with zero decimal places.

Upvotes: 1

isedev
isedev

Reputation: 19641

You could try something like this.

Define a custom formatter at the beginning of your script:

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

Then setup your logging system:

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

etc...

Upvotes: 1

user2155932
user2155932

Reputation: 745

You can subclass logging.Formatter and reimplement formatTime. Something like that:

start_time = datetime.now()

class MyFormatter(logging.Formatter):

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

And then:

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("=)")

Upvotes: 1

Related Questions