据我了解,
'hello {0}'.format("world")
慢于:
"hello %s" % "world"
我的问题是,记录器在传递时如何格式化字符串,如下所示:
logger.debug("hello %s", "world")
并假设日志永远不会被关闭,这样做会更好:
logger.debug("hello %s" % "world")
据我了解,
'hello {0}'.format("world")
慢于:
"hello %s" % "world"
我的问题是,记录器在传递时如何格式化字符串,如下所示:
logger.debug("hello %s", "world")
并假设日志永远不会被关闭,这样做会更好:
logger.debug("hello %s" % "world")
不要忘记,如果您最终使用了 Sentry 等日志聚合服务,那么所有对以下的调用:
logger.error("hello %s", planet)
将被归为同一错误的多次出现,而所有调用:
logger.error("hello %s" % (planet,))
将被列为许多不同的错误,每个错误都发生一次。这使得很难对哪些错误实际上经常发生进行分类。
此分组行为基于记录调用的第一个参数的值。在第一个示例中,它们都是相同的,而在第二个示例中,它们都取决于“planet”的值。
因此,重要的是不要在传递给日志记录的字符串上使用 '%' 或 .format 运算符。让日志调用为您完成。
任何差异都可以忽略不计。记录器花费的时间主要受其输出通道速度的影响——而 IO总是很慢。使用%
比较的记录器之间的差异.format
将是每个字符串大约半微秒。平均而言,记录器将花费比这更多的时间 - 可能是几秒钟 - 实际记录每个字符串。