2011-01-14 40 views
1

我使用的SQLAlchemy 0.6.3與塔1.0,和我的sqlalchemy.log文件正在由「BEGIN」污染電話:BEGIN呼叫被污染的SQLAlchemy日誌

2011-01-14 10:15:17 SELECT /* redacted */ 
2011-01-14 10:15:22 BEGIN 
2011-01-14 10:15:27 BEGIN 
2011-01-14 10:15:32 BEGIN 
2011-01-14 10:15:37 BEGIN 
2011-01-14 10:15:42 BEGIN 
2011-01-14 10:15:47 BEGIN 
2011-01-14 10:15:52 BEGIN 
2011-01-14 10:15:53 SELECT /* redacted */ 
2011-01-14 10:16:33 BEGIN 
2011-01-14 10:16:35 BEGIN 
2011-01-14 10:16:42 BEGIN 
2011-01-14 10:16:49 BEGIN 
2011-01-14 10:16:52 BEGIN 

這實在是煩人,並得到以查看由SQLAlchemy執行的有用SQL代碼的方式。無論如何阻止SQLAlchemy打印出來,甚至完全執行這些?他們似乎沒有做任何事情。

回答

0

一種方法是找出SQLAlchemy爲什麼要這樣做,看看它們是否可以避免。 另一種方法是在日誌級別將其過濾掉。 Python的logging模塊支持過濾器。

這裏有一個快速的獨立實例,改編自this example from Python docs

import logging 

class BeginFilter(logging.Filter): 
    """ This is a filter which drops BEGIN statements. """ 

    def filter(self, record): 
     return False if record.msg == "BEGIN" else True 

if __name__ == "__main__": 
    logging.basicConfig(level=logging.DEBUG, 
         format="%(asctime)-15s %(name)-5s %(levelname)-8s %(message)s") 
    a1 = logging.getLogger("a.b.c") 

    f = BeginFilter() 
    a1.addFilter(f) 

    a1.debug("SELECT ...") 
    a1.debug("BEGIN") 
    a1.debug("BEGIN") 
    a1.debug("BEGIN") 
    a1.debug("BEGIN") 
    a1.debug("SELECT ...") 
    a1.debug("BEGIN")