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)
如果我使用 logging
登录,我可以通过设置
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)