在python 2日志中指定utc偏移量

logging-tz的Python项目详细描述


python 2日志模块不支持在datetime格式字符串中使用时区偏移量%z。故障模式示例如下:

importloggingdatefmt='%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中登录,但是指定本地化时间指定零偏移量肯定是错误的。标记为^的部分不正确,偏移时间戳应该更像这样:

importpytzfromdatetimeimportdatetimechicago_now=datetime.now(tz=pytz.timezone('America/Chicago'))printchicago_now.strftime(datefmt)# 2017-02-27 18:23:13-0600

实际上,如果在python 3下运行,日志输出看起来就是这样的。但是在python 2中,%z指令被删除。此模块提供一个LocalFormatter作为替换项,以在python 2下提供时区偏移的正确处理:

importlogging,logging_tzdatefmt='%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上运行其后端的人的痛苦。

常见问题解答

q:
如何安装此库?
a:
pip install logging_tz,然后您可以使用logging_tz.LocalFormatter,而不是logging.Formatter
q:
您应该登录UTC。你为什么要登录本地时间?
a:
Yeah, I guess。虽然正确处理日期格式至少比完全弄脏它要好。
q:
这是python中的一个bug吗?
a:
嗯,可以说不是,因为时区偏移量的%z指令没有列在Python 2 documentation中的time.strftime表中。不过,它是there in the Python 3 docs
q:
人们真的问过你这些问题吗?我敢打赌你只是为常见问题做了些补充。
a:
这是个很好的问题-事实上,这是我经常问自己的问题。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在IE10中重新加载另一个帧时,internet explorer Java小程序失败/消失   ThreadLocal变量的java性能   java系统。出来println不是打印输出   java从JAXB类获取元素属性   java组织。天啊。科尔巴。包裹。InvalidName:IDL:omg。org/CORBA/ORB/InvalidName:1.0   java有没有办法让非事务连接抛出异常?   java是否有任何方法可以使用JdbcTemplate和查询/条件Fluent API   javajpa级联类型。刷新不工作?   未考虑java Maven依赖关系管理   java MySQL MBR包含抛出MySQLExceptionError的语句   java验证整数并将其设为5位数   java发现了循环依赖的问题   java Hibernate left join fetch到使用@ManyToMany关联映射的softdeleted实体生成无效查询?   JavaH:commandButton多个操作:下载文件并呈现ajax表   Google Contacts API在Java、C#、Python或Ruby中是否有一个Hello World示例?