logging time format millisecond precision decimalsign

Peter Otten __peter__ at web.de
Fri Jul 20 16:31:52 CEST 2012

Alex van der Spek wrote:

> I use this formatter in logging:
> formatter = logging.Formatter(fmt='%(asctime)s \t %(name)s \t
> %(levelname)s \t %(message)s')
> Sample output:
> 2012-07-19 21:34:58,382   root   INFO   Removed - C:\Users\ZDoor\Documents
> The time stamp has millisecond precision but the decimal separator is a
> comma.
> Can I change the comma (,) into a period (.) and if so how?

I think you have to subclass Formatter.formatTime(). Here's a monkey-
patching session to get you started:

>>> import logging
>>> logging.basicConfig(format="%(asctime)s")
>>> logging.getLogger().error("foo")
2012-07-20 16:17:39,364
>>> _formatTime = logging.Formatter.formatTime
>>> def formatTime(*args):
...     return _formatTime(*args).replace(",", ".")
>>> logging.Formatter.formatTime = formatTime
>>> logging.getLogger().error("foo")
2012-07-20 16:20:20.838

See also


Changed in version 3.3: Previously, the default ISO 8601 format was hard-
coded as in this example: 2010-09-06 22:38:15,292 where the part before the 
comma is handled by a strptime format string ('%Y-%m-%d %H:%M:%S'), and the 
part after the comma is a millisecond value. Because strptime does not have 
a format placeholder for milliseconds, the millisecond value is appended 
using another format string, '%s,%03d' – and both of these format strings 
have been hardcoded into this method. With the change, these strings are 
defined as class-level attributes which can be overridden at the instance 
level when desired. The names of the attributes are default_time_format (for 
the strptime format string) and default_msec_format (for appending the 
millisecond value).

More information about the Python-list mailing list