0
0
mirror of https://github.com/mongodb/mongo.git synced 2024-11-24 16:46:00 +01:00
mongodb/buildscripts/resmokelib/logging/formatters.py

51 lines
1.7 KiB
Python

"""
Custom formatters for the logging handlers.
"""
from __future__ import absolute_import
import logging
import sys
import time
class ISO8601Formatter(logging.Formatter):
"""
An ISO 8601 compliant formatter for log messages. It formats the
timezone as an hour/minute offset and uses a period as the
millisecond separator in order to match the log messages of MongoDB.
"""
def formatTime(self, record, datefmt=None):
converted_time = self.converter(record.created)
if datefmt is not None:
return time.strftime(datefmt, converted_time)
formatted_time = time.strftime("%Y-%m-%dT%H:%M:%S", converted_time)
timezone = ISO8601Formatter._format_timezone_offset(converted_time)
return "%s.%03d%s" % (formatted_time, record.msecs, timezone)
@staticmethod
def _format_timezone_offset(converted_time):
"""
Returns the timezone as an hour/minute offset in the form
"+HHMM" or "-HHMM".
"""
# Windows treats %z in the format string as %Z, so we compute the hour/minute offset
# manually.
if converted_time.tm_isdst == 1 and time.daylight:
utc_offset_secs = time.altzone
else:
utc_offset_secs = time.timezone
# The offset is positive if the local timezone is behind (east of) UTC, and negative if it
# is ahead (west) of UTC.
utc_offset_prefix = "-" if utc_offset_secs > 0 else "+"
utc_offset_secs = abs(utc_offset_secs)
utc_offset_mins = (utc_offset_secs / 60) % 60
utc_offset_hours = utc_offset_secs / 3600
return "%s%02d%02d" % (utc_offset_prefix, utc_offset_hours, utc_offset_mins)