在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第三方库


热门话题
java使用Spring Boot JPA配置多个数据源   java如何对时间范围进行通用建模,以允许任何时间段或更具体的时间段的范围   java Hystrix拒绝完全未来返回类型   带有MongoDB数据源错误的java Spring安全性   Java中的windows多线程:不同的操作系统提供不同的性能吗?   java使用KeyCode和修饰符获取keyCharValue   JDBC语句中的javasysdate在查询同一个Oracle数据库时似乎返回不同的时间   将具体类型的列表强制转换为Java中的接口列表   java在安卓中经过一段时间后重新执行代码   将数据加载到java时出现NullPointerException。util。属性对象   Java根据对象的名称调用对象并使用它们   java使用Android创建强大的密码生成器   java组织。莫基托。例外情况。滥用。MissingMethodInvocation异常   java Spring数据JPA无法找到id为的对象   datetime如何使用Java计算相对时间跨度(代码转换问题)?   java如何在Android应用程序的新窗口中显示字符串?   java确定应该在其上运行测试用例的目录   java文件io中的向下投射和向上投射?   企业JavaBean中方法的java访问修饰符