我是Django的新手,一直在玩伐木。在我看来,以下info()
语句基本上是等价的:
log = logging.getLogger(__name__)
.
.
.
log.info("This is a %s" % "test") # Python style
log.info("This is a %s", "test") # C style
有什么区别吗?就我个人而言,我一直喜欢在任何地方使用Python风格的格式,我倾向于坚持这种方法。Python格式还有很多内容,所以它看起来更强大。为什么Django给我们选择?使用C风格有什么好处吗?在
这实际上不是关于字符串格式,而是关于向方法传递参数。在
方法
logging.info
,作为其相关方法logging.debug
、logging.warning
、logging.error
等,采用以下参数:这意味着
^{pr2}$msg
是一个必需的位置参数。在第一个示例中,只传递一个参数:在另一个例子中,您传递了两个参数:
在第一个示例中,您手动执行该方法可以为您完成的工作。在
多参数样式延迟格式化时刻。这使日志模块的其他部分有机会在最终格式化之前对这些参数进行操作,甚至选择忽略调用。在
正如Charles Duffypoints out,logging flow diagram中的第一步是检查是否为调用级别启用了记录器。如果没有启用日志记录级别,甚至不会创建LogRecord。因此,在这些情况下,延迟格式化可以节省程序的计算周期。在
此延迟的另一个可能用途是^{}s 可以在参数格式化之前处理它们:
日志
^{pr2}$请注意,参数
brillig
和toves
被大写并用ContextFilter
隔开。如果logger.info
仅仅接受预格式化的字符串,那么您将无法做到这一点(不强制用户在调用logger.info
之前完成ContextFilter
的工作)。在过滤器也可以用来(惊喜!)在记录发出之前过滤掉它们(通过返回
False
而不是True
)。延迟格式化允许Filter
s根据参数值检查并可能筛选出记录。因此,在不需要时,可以完全避免使用字符串格式。在相关问题 更多 >
编程相关推荐