Может ли Twisted logger войти в UT C? - PullRequest
1 голос
/ 27 января 2020

Если я регистрируюсь с logging, я могу заставить метку времени быть в UT C время, установив

logging.Formatter.converter = time.gmtime

следующим образом:

import sys
import time
import logging

handler = logging.StreamHandler(sys.stdout)
out_fmt = '[%(asctime)s.%(msecs)03dZ] [%(levelname)s] %(message)s'
dt_fmt = '%Y-%m-%d %H:%M:%S'
logging.Formatter.converter = time.gmtime
formatter = logging.Formatter(out_fmt, dt_fmt)
handler.setFormatter(formatter)
root = logging.getLogger()
root.setLevel(10)
root.addHandler(handler)
logging.log(logging.INFO, 'Start logging')

Поскольку мое приложение будет использовать Twisted, я хочу использовать twisted.logger вместо для регистрации. И действительно, это намного проще:

import sys

from twisted.logger import Logger, textFileLogObserver

log = Logger(observer=textFileLogObserver(sys.stdout, '%Y-%m-%d %H:%M:%S.%fZ'))
log.info('Start logging')

Проблема в том, что временная метка находится в местном времени, а не в UT C времени. Есть ли способ заставить Twisted logger использовать время UT C?

1 Ответ

0 голосов
/ 18 февраля 2020

В итоге я переопределил formatTime в FileLogObserver:

import sys
from datetime import datetime
from twisted.python import log


def myFLOformatTime(self, when):
    timeFormatString = self.timeFormat
    if timeFormatString is None:
        timeFormatString = '[%Y-%m-%d %H:%M:%S.%fZ]'
    return datetime.utcfromtimestamp(when).strftime(timeFormatString)


if __name__ == '__main__':
    log.FileLogObserver.formatTime = myFLOformatTime
    log.startLogging(sys.stdout)
...