Python 日志变量:插值还是格式?

jon*_*tan 8 python logging

使用 Python 记录变量的推荐方法logging是什么,为什么更好?

旧式插值:

apple = "green"
logger.debug("apple is %s", apple)
Run Code Online (Sandbox Code Playgroud)

或者

新风格 .format()

logger.debug("apple is {}".format(apple))
Run Code Online (Sandbox Code Playgroud)

我听说插值是首选的,因为它只评估要打印的字符串,但我还没有验证它是否真的很重要。

xjc*_*jcl 3

logger.debug("apple is {}".format(apple))
Run Code Online (Sandbox Code Playgroud)
logger.debug(f"apple is {apple}")
Run Code Online (Sandbox Code Playgroud)

新式格式化将始终构建一个 string。如果这很昂贵(例如记录一个大的 pandas DataFrame),这将影响性能。


logger.debug("apple is %s", apple)
Run Code Online (Sandbox Code Playgroud)

如果消息实际上最终被记录,旧式插值仅构建日志字符串。如果您的应用程序的日志级别是 INFO/WARNING/ERROR/CRITICAL 之一,则它只会记录至少该日志级别的消息。因此这个调试级别的消息不会被记录并且插值被跳过

总之,是的,插值可以节省格式化工作(有效地调用__str__)——这是否真的重要取决于您的应用程序。