在Python 2日志中指定UTC偏移量
项目描述
Python 2的日志模块不支持在datetime格式字符串中使用时区偏移量 %z。以下是一个示例失败模式:
import logging
datefmt = '%Y-%m-%d %H:%M:%S%z'
logging.basicConfig(format='%(asctime)s %(message)s', datefmt=datefmt)
logging.warning("Dude, where's my tzinfo?") # it's about 6.20 pm here in Chicago
# 2017-02-27 18:23:05+0000 Dude, where's my tzinfo?
^^^^^
简单地省略时区偏移量可能是可以接受的,或者甚至可能简单地拒绝本地化并仅在UTC中记录,但指定本地化时间 和 指定零偏移量肯定是不正确的。标记为 ^ 的部分是不正确的,偏移时间戳应该看起来更像是这样
import pytz
from datetime import datetime
chicago_now = datetime.now(tz=pytz.timezone('America/Chicago'))
print chicago_now.strftime(datefmt)
# 2017-02-27 18:23:13-0600
实际上,这就是在Python 3下运行时的日志输出 确实 看起来的样子。但在Python 2中,%z指令被删除。此模块提供了一个 LocalFormatter,旨在作为直接替换项,以便在Python 2下正确处理时区偏移量
import logging, logging_tz
datefmt = '%Y-%m-%d %H:%M:%S%z'
logger = logging.getLogger('wat')
handler = logging.StreamHandler()
formatter = logging_tz.LocalFormatter(fmt='%(asctime)s %(message)s', datefmt=datefmt)
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.warning("Ah, there's my tzinfo!")
# 2017-02-27 18:25:53-0600 Ah, there's my tzinfo!
此外,还提供了一个 ChicagoFormatter,作为一种便利,以减轻那些足够疯狂将后端运行在CST而不是UTC上的人的痛苦。
常见问题解答
- 问题
如何安装这个库?
- 答案
使用 pip install logging_tz 安装,然后您可以使用 logging_tz.LocalFormatter 而不是 logging.Formatter。
- 问题
您应该在UTC中记录。您为什么要记录本地时间呢?
- 答案
是啊,我想。虽然正确处理日期格式至少比完全搞砸要好。
- 问题
这是Python中的一个bug吗?
- 答案
嗯,可以说不是,因为时区偏移量的%z指令在Python 2文档的time.strftime表中没有列出。但在Python 3文档中是有的。
- 问题
人们真的问过你这些问题吗?我敢打赌你只是为FAQ编造了这些问题。
- 答案
这是一个非常好的问题——事实上,这是我经常问自己的问题。
项目详情
下载文件
下载适合您平台的文件。如果您不确定该选择哪个,请了解有关安装包的更多信息。
源代码分发
本发布没有可用的源代码分发文件。请参阅生成分发存档的教程。
构建分发
logging_tz-0.1-py2-none-any.whl (5.7 kB 查看散列值)
关闭
logging_tz-0.1-py2-none-any.whl的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 18a2c2cef418278153cd2710725279744933944291099c0c7670cc6c370f6fd8 |
|
MD5 | 14c613d1a02dd64c2cf99bba2616d756 |
|
BLAKE2b-256 | 021f9d50b07253935e5af89b725780284e98adfbb9274d92a58f1f92c4699844 |