我在一个项目中遇到了一个性能问题,我把它缩小到了一些日志(log)行.即使我的日志(log)记录设备高于正在记录的行的级别,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}')
当这个例子运行时,我会在屏幕上打印"生成字符串",表明正在运行__str__
方法,即使我的日志(log)级别设置为INFO
,日志(log)行为DEBUG
.
从我今天所知道的,解决方案是使用下面的vs f字符串.
logger.debug('Created: %s', c)
我现在脑子里有三件事.
- 我读到的大多数例子和文档似乎都很旧.
- 此项目仅限于Python 3.7+(不担心向后兼容).
- 我有很多代码需要更新.
我很想知道其他人在这种情况下会怎么做.%s
是最好(最现代)的方法吗?是否有一种更现代的方式可以像上面演示的那样记录日志(log)?
我有很多代码需要更新(修复),我希望与现代最佳实践保持一致.