栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用新的格式字符串记录变量数据

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用新的格式字符串记录变量数据

编辑:
与这个答案不同,看看

StyleAdapter
@Dunes答案中的方法;它允许在调用记录器的方法(debug(),info(),error()等)时使用其他格式样式而无需样板。

更简单的解决方案是使用出色的logbook模块

import logbookimport syslogbook.StreamHandler(sys.stdout).push_application()logbook.debug('Format this message {k}', k=1)

或更完整的:

>>> import logbook>>> import sys>>> logbook.StreamHandler(sys.stdout).push_application()>>> log = logbook.Logger('MyLog')>>> log.debug('Format this message {k}', k=1)[2017-05-06 21:46:52.578329] DEBUG: MyLog: Format this message 1

来自文档-使用其他格式样式:

记录调用(logger.debug(),logger.info()等)仅采用实际记录消息本身的位置参数,而关键字参数仅用于确定如何处理实际记录调用的选项(例如exc_info关键字参数)表示应该记录回溯信息,或extra关键字参数指示要添加到日志的其他上下文信息。因此,您不能使用str.format()或string.Template语法直接进行日志记录调用,因为日志记录包在内部使用%-formatting来合并格式字符串和变量参数。在保留向后兼容性的同时,不会进行任何更改,因为现有代码中存在的所有日志记录调用都将使用%格式的字符串。

和:

但是,有一种方法可以使用{}-和$-格式构造您的单个日志消息。回想一下,对于一条消息,您可以使用任意对象作为消息格式字符串,并且日志记录程序包将对该对象调用str()以获取实际的格式字符串。

复制粘贴到

wherever
模块:

class BraceMessage(object):    def __init__(self, fmt, *args, **kwargs):        self.fmt = fmt        self.args = args        self.kwargs = kwargs    def __str__(self):        return self.fmt.format(*self.args, **self.kwargs)

然后:

from wherever import BraceMessage as __log.debug(__('Message with {0} {name}', 2, name='placeholders'))

注意:实际格式化会延迟到必要时才进行,例如,如果未记录DEBUG消息,则根本不会执行格式化。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/637750.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号