2

Python 有两个主要的字符串格式化选项%str.format. logging模块有一个惰性特性。

logging.debug('The value is %s', huge_arg)

如果不打印日志行,则不会构造字符串。但是,此功能仅在 sting 使用旧样式%格式时才有效。有没有办法使用str.format这个惰性功能?可能有一个命名的参数,如:

logging.debug('The value is {}', fmt_arg=(huge_arg))
4

2 回答 2

4

您的问题的唯一答案是 - 到目前为止 - 没有人自愿更改logging代码以支持更新的格式功能。如果你是志愿者,为什么不在Python-Dev 邮件列表中询问呢?我预计它比您意识到的要棘手(例如,可能已经调用了logging恰好传递fmt_arg关键字参数的函数)。祝你好运 ;-)

于 2013-10-19T04:32:52.267 回答
3

我有点害怕反驳 TimBot,但我有另一个答案:-)

日志记录模块使用 % 格式,因为它早于 Python 中 {} 格式的出现(logging出现在 2.3str.format和 2.6 中)。日志记录尚未转换为 {} 格式,因为:

  1. 您不能在不破坏第三方库和应用程序中的大量现有代码的情况下进行切换,因此 %-formatting 将继续存在。
  2. 当 {}-formatting 出现时,它比 %-formatting 慢一些(AFAIK,它仍然是,尽管它提供了对输出的更多控制),并且人们将日志记录视为一种开销,更不用说增加这种开销了; -)
  3. 已经支持 {} 格式甚至 $ 样式格式 ( ),如2010 年的这篇文章所述。所描述的方法支持日志记录的惰性格式。string.Template
于 2013-10-19T16:23:28.333 回答