2011-01-14 39 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")