2013-06-23 48 views
0

如果我有我的日志级别设置为INFO,以下两个行会导致查询集仍然进行评估,即使未打印的数据:懒惰的评价

logger.debug("Count is %s"%Widget.objects.count()) 
logger.debug("Count is %s", Widget.objects.count()) 

有没有办法避免这种情况?

+2

'计数()'返回INT,不查询集。 (立即评估)。请参阅https://docs.djangoproject.com/en/1.5/ref/models/querysets/#when-querysets-are-evaluated – falsetru

+0

,但即使我使用查询集,也有同样的问题,例如logger.debug('count is%s',User.objects.all())立即运行查询,即使日志级别设置为INFO,以便邮件不会出现在日志中 – alan

+0

即使邮件不是显示,它被转换为字符串;那需要评估。 – falsetru

回答

0

唯一方法是存储价值变量

obj_count = Widget.objects.count() 
logger.debug("Count is %d"% obj_count) 
logger.debug("Count is %d", obj_count) 
+0

但问题是,如果日志级别为INFO,我不希望查询运行,因为消息不会显示 – alan

2

我找到了答案在这里:

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()))