【发布时间】:2011-09-13 08:25:24
【问题描述】:
是否可以以及如何将日志记录时区设置为 GMT?
(即格式中的%(asctime)s参数)
【问题讨论】:
标签: python logging timezone utc
是否可以以及如何将日志记录时区设置为 GMT?
(即格式中的%(asctime)s参数)
【问题讨论】:
标签: python logging timezone utc
logging.Formatter.converter = time.gmtime
(记录在logging.Formatter.formatTime的文档字符串中)
【讨论】:
logging.Formatter.converter = time.gmtime 将适用于从 logging.Formatter 类继承的任何格式化程序。只需检查 Django 格式化程序是否继承自 Python 的主 Formatter 类,我敢打赌。
在 Python 2.5 中仅设置 logging.Formatter.converter = time.gmtime 对我来说是无效的。
所以我创建了一个设置它的子类,并使用它来代替 logging.Formatter:
class UTCFormatter(logging.Formatter):
converter = time.gmtime
【讨论】:
__init__() 方法。)
来自 python 3 文档:
import time
class UTCFormatter(logging.Formatter):
converter = time.gmtime
【讨论】:
这里是代码示例:
import logging, logging.handlers
import time
logit = logging.getLogger('logit')
handler = logging.handlers.RotatingFileHandler("file.log", maxBytes=20000, backupCount=5)
handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s %(levelname)8s: %(message)s')
handler.setFormatter(formatter)
logging.Formatter.converter = time.gmtime
logit.addHandler(handler)
logit.info("test log message")
输出:
2019-11-14 16:34:22,967 INFO: test log message
【讨论】:
这行得通:
os.environ['TZ'] = 'UTC'
time.tzset()
但确实会改变整个流程和任何子流程的 TZ 环境。不一定是坏事,但在这样做之前需要注意一些事情。
或者,如果您在运行 python 之前从外部设置 TZ 环境变量(无论是在任何运行 python 的环境中,还是在整个系统级别),这也可以。
【讨论】:
我对这两个答案都有疑问。所以我只是更改了整个脚本的全球时区:
os.environ['TZ'] = 'Europe/London'
time.tzset()
【讨论】: