如果我有我的日志级别设置为INFO,以下两个行会导致查询集仍然进行评估,即使未打印的数据:懒惰的评价
logger.debug("Count is %s"%Widget.objects.count())
logger.debug("Count is %s", Widget.objects.count())
有没有办法避免这种情况?
如果我有我的日志级别设置为INFO,以下两个行会导致查询集仍然进行评估,即使未打印的数据:懒惰的评价
logger.debug("Count is %s"%Widget.objects.count())
logger.debug("Count is %s", Widget.objects.count())
有没有办法避免这种情况?
唯一方法是存储价值变量
obj_count = Widget.objects.count()
logger.debug("Count is %d"% obj_count)
logger.debug("Count is %d", obj_count)
但问题是,如果日志级别为INFO,我不希望查询运行,因为消息不会显示 – alan
我找到了答案在这里:
https://stackoverflow.com/a/4149190/390973
class Lazy(object):
def __init__(self,func):
self.func=func
def __str__(self):
return self.func()
logger.debug(Lazy(lambda: "Count is %s"%Widget.objects.count()))
'计数()'返回INT,不查询集。 (立即评估)。请参阅https://docs.djangoproject.com/en/1.5/ref/models/querysets/#when-querysets-are-evaluated – falsetru
,但即使我使用查询集,也有同样的问题,例如logger.debug('count is%s',User.objects.all())立即运行查询,即使日志级别设置为INFO,以便邮件不会出现在日志中 – alan
即使邮件不是显示,它被转换为字符串;那需要评估。 – falsetru