logging time format millisecond precision decimalsign

A

Alex van der Spek

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?

Thanks in advance,
Alex van der Spek
 
P

Peter Otten

Alex said:
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:
.... return _formatTime(*args).replace(",", ".")
....2012-07-20 16:20:20.838

See also

http://docs.python.org/dev/py3k/library/logging.html#logging.Formatter.formatTime

"""
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).
"""
 
D

David Bolen

Alex van der Spek said:
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 do it by:

1. Replacing the default date format string to exclude ms.
2. Including %(msecs)03d in the format string where appropriate. Using 'd'
instead of s truncates rather than shows the full float value.

So in your case, I believe that changing your formatter creation to:

formatter = logging.Formatter(fmt='%(asctime)s.%(msecs)03d \t %(name)s \t %(levelname)s \t %(message)s', '%Y-%m-%d %H:%M:%S')

should work. This uses the same date format as the default, but
without ms, though of course you could also opt to make any other date
format you prefer.

-- David
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top