Python 3.7 日志记录:f 字符串

我在一个项目中遇到了一个性能问题,我把它缩小到一些日志行。似乎即使我的日志记录工具高于正在记录的行的级别,也会计算 f 字符串。

考虑这个例子来演示这个问题:

import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger('MyLogger')

class MyClass:
def __init__(self, name: str) -> None:
self._name = name
def __str__(self) -> str:
print('GENERATING STRING')
return self._name

c = MyClass('foo')
logger.debug(f'Created: {c}')
运行此示例时,我将“GENERATING STRING”打印到屏幕上,表明__str__即使我的日志记录级别设置为INFO并且日志行用于DEBUG.

据我今天所知,解决方案是使用以下与 f 字符串。

logger.debug('Created: %s', c)
我现在脑子里闪过三件事。

我阅读的大多数示例和文档似乎都很旧。
该项目仅适用于 Python 3.7+(不担心向后兼容)。
我有很多代码行要更新。
我很想知道其他人在这种情况下会做什么。是%s最好的(最现代的)方法吗?有没有更现代的方式来记录我的日志,如上所示?

我有很多代码要更新(修复),我希望与现代最佳实践保持一致。

已邀请:
该文档说日志库已优化为使用%s格式样式。我不记得确切在哪里提到它,但我几个月前读过它。

编辑- 找到了!https://docs.python.org/3/howto/logging-cookbook.html#formatting-styles
Edit2 - (感谢 Robin Nemeth):https : //docs.python.org/3/howto/logging.html#优化

要回复问题请先登录注册