对于以下代码:
logger.debug('message: {}'.format('test'))
Run Code Online (Sandbox Code Playgroud)
pylint 产生以下警告:
记录格式插值(W1202):
在日志记录函数中使用%格式并将%参数作为参数传递当日志语句的调用形式为"logging.(format_string.format(format_args ...))"时使用.此类调用应使用%格式,但通过将参数作为参数传递,将插值留给日志记录功能.
我知道我可以关掉这个警告,但我喜欢理解它.我假设使用format()是打印输出语句的首选方法pylint.为什么记录器语句不适用?
我使用python 2.7.3的日志工具.这个Python版本的文档说:
日志包提前更新格式化选项,如str.format()和string.Template.支持这些较新的格式化选项...
我喜欢花括号的"新"格式.所以我想尝试做类似的事情:
log = logging.getLogger("some.logger")
log.debug("format this message {0}", 1)
Run Code Online (Sandbox Code Playgroud)
并得到错误:
TypeError:并非在字符串格式化期间转换所有参数
我想念的是什么?
PS我不想用
log.debug("format this message {0}".format(1))
Run Code Online (Sandbox Code Playgroud)
因为在这种情况下,无论记录器级别如何,都始终格式化消息.
在Python记录教程说,格式化的方式从未超出了本文的范围,就不能不提这里学习一下吧。
我将不胜感激任何例子/文档,让我用.format()风格的消息在日志调用,如格式化debug(),info()等等。