【发布时间】:2012-08-10 22:48:42
【问题描述】:
使用格式字符串 + args 列表调用日志记录函数与内联格式相比是否有利?
我见过(并写过)使用内联字符串格式的日志记录代码:
logging.warn("%s %s %s" % (arg1, arg2, arg3))
但我认为使用它更好(在性能方面,并且更惯用):
logging.warn("%s %s %s", arg1, arg2, arg3)
因为第二种形式在调用日志记录函数之前避免了字符串格式化操作。如果当前日志级别会过滤掉日志消息,则无需格式化,从而减少计算时间和内存分配。
我是在正确的轨道上,还是我错过了什么?
【问题讨论】:
-
我认为你在正确的轨道上。
-
您有关于在不同时间进行字符串格式化的时间的参考吗?我本来希望两者都发生在拨打
warn之前。不争论你在说什么,只是想了解更多。 -
嗯,在第一种形式中,我们在调用
logging.warn之前进行字符串格式化(和元组创建)之前 - 在第二种情况,我们只是将一个 args 列表传递给logging.warn(这仅仅是创建元组?) - 所以我们避免在调用时进行字符串格式化操作。正如我在问题中提到的,我假设如果当前的日志记录级别会过滤掉日志消息,则不会进行格式化,再次避免字符串格式化操作。我的猜想是这应该节省处理时间和内存分配。 -
@Inactivist Ah .. 好的,感谢您提供更多信息。我想您可以根据我提供的时间以及您已有的信息得出自己的结论。我想另一种方法可能是计算实际调用的时间并查看它们的比较?
标签: python logging coding-style idioms