为什么python日志记录模块使用旧的字符串格式?

时间:2013-10-19 04:14:18

标签: python logging string-formatting

Python有两个主要的字符串格式选项%str.formatlogging模块具有惰性功能。

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

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

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

我有点害怕与TimBot相矛盾,但我有另一个答案: - )

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

  1. 您不能在不破坏第三方库和应用程序中的大量现有代码的情况下进行切换,因此%-formatting将继续存在。
  2. 当{} -formatting到达时,%-formatting(AFAIK,它仍然是,虽然它提供了对输出的更多控制)有点慢,并且人们认为日志记录是一个开销,不要在意添加到开销; - )
  3. 已经支持{} -formatting甚至$-style格式化(string.Template),如this post from 2010中所述。所描述的方法支持日志记录的延迟格式化。