我正在使用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打印这些,甚至完全执行这些?他们似乎没有做任何事情。
答案 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")