我想记录一些实例的信息。但是,我希望根据我使用的日志级别显示不同级别的详细信息。例如:
LOGGER.level
# => 20
LOGGER.info('Car info: %s', Car())
# => [INFO]: Car info: Celica
LOGGER.setLevel(logging.DEBUG)
LOGGER.info('Car info: %s', Car())
# => [INFO]: Car info: {'name': 'Celica', 'year': 1998, 'model': 'GT-Four'}
到目前为止,我得出了如下结论:
import logging
LOGGER = logging.getLogger()
logging.basicConfig(
format='[%(levelname)s]: %(message)s',
level=logging.INFO)
class Car:
def __init__(self):
self.name = 'Celica'
self.year = 1998
self.model = 'GT-Four'
def __repr__(self):
if LOGGER.level == logging.DEBUG:
return str(self.__dict__)
return f'{self.name}'
我觉得这有点过于“定制”和硬编码。在{
是的,这在
__repr__
中是不寻常的逻辑——正如您所识别的,可能是代码气味。通常,表示逻辑将放在Formatter
子类中,但也可以放在filter中。下面是一个简单的工作示例;您应该能够将基本想法调整为更一般的方案:运行时,上述脚本将打印:
相关问题 更多 >
编程相关推荐