Search code examples
pythonloggingpython-logging

Python logging time since start in seconds


I would like to add the number of seconds my program is up to my logging output.

I've found relativeCreated here but it will give me the milliseconds, e.g. this:

logging.basicConfig(format='{relativeCreated:8.0f}ms {levelname:s} {message:s}', style="{")

Results in

4081ms INFO my message
6012ms INFO another message

But as I expect the running times to be in the hours, I would prefer.

4s INFO my message
6s INFO another message

I tried

logging.basicConfig(format='{relativeCreated / 1000:4.0f}s {levelname:s} {message:s}', style="{")

but this results in

KeyError: 'relativeCreated / 1000'

Solution

  • You can subclass logging.Formatter to modify relativeCreated:

    import logging
    import time
    
    class RelativeSeconds(logging.Formatter):
        def format(self, record):
            record.relativeCreated = record.relativeCreated // 1000
            return super().format(record)
    
    formatter = RelativeSeconds("%(relativeCreated)ds %(levelname)s %(message)s")
    
    logging.basicConfig()
    logging.root.handlers[0].setFormatter(formatter)
    
    logging.error("Test 1")
    time.sleep(2)
    logging.error("Test 2")
    

    Prints:

    0s ERROR Test 1
    2s ERROR Test 2