BEGIN调用正在污染SQLAlchemy日志

时间:2011-01-14 15:22:31

标签: python logging sqlalchemy pylons

我正在使用SQLAlchemy 0.6.3和Pylons 1.0,而我的sqlalchemy.log文件被“BEGIN”调用污染了:

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打印这些,甚至完全执行这些?他们似乎没有做任何事情。

1 个答案:

答案 0 :(得分: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")