对于以下代码:
logger.debug('message: {}'.format('test'))
pylint
产生以下警告:
记录格式插值(W1202):
在日志记录函数中使用%格式并将%参数作为参数传递当日志语句的调用形式为"logging.(format_string.format(format_args ...))"时使用.此类调用应使用%格式,但通过将参数作为参数传递,将插值留给日志记录功能.
我知道我可以关掉这个警告,但我喜欢理解它.我假设使用format()
是打印输出语句的首选方法pylint
.为什么记录器语句不适用?
对于logger语句来说并不是这样,因为它依赖于像string这样的前"%"格式,使用给予记录器调用的额外参数来提供此字符串的延迟插值.例如,而不是做:
logger.error('oops caused by %s' % exc)
你应该做
logger.error('oops caused by %s', exc)
所以只有在实际发出消息时才会插入字符串.
使用时,您无法受益于此功能.format()
.
根据文档的优化部分logging
:
消息参数的格式化将被推迟,直到无法避免.但是,计算传递给日志记录方法的参数也可能很昂贵,如果记录器只是丢弃您的事件,您可能希望避免这样做.