2013-06-23 140 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()))