Twisted 记录器可以在 UTC 中登录吗?

Can the Twisted logger log in UTC?

如果我使用 logging 登录,我可以通过设置

强制时间戳为 UTC 时间
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')

问题是,时间戳是本地时间 - 而不是 UTC 时间。有没有办法让 Twisted 记录器使用 UTC 时间?

我最终在 FileLogObserver 中覆盖了 formatTime

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)