如何将sqlalchemy.engine.base.Engine的日志记录压缩为stdout?

时间:2013-09-16 04:09:06

标签: python sqlalchemy

我在Windows 7中运行一个使用sqlalchemy的python应用程序。

在控制台(DOS提示符)中,我可以看到sqlalchemy模块的大量输出,例如。

2013-09-16 13:59:20,158 INFO sqlalchemy.engine.base.Engine UPDATE DATA SET qty=?, price=?

我想继续在日志文件中记录这些消息,但是希望禁止它们打印到stdout。

2 个答案:

答案 0 :(得分:4)

尝试将FileHandler添加到sqlalchemy记录器并将其propagate属性设置为False,例如:

import logging

sqla_logger = logging.getLogger('sqlalchemy')
sqla_logger.propagate = False
sqla_logger.addHandler(logging.FileHandler('/path/to/sqla.log'))

或者,您可以使用日志记录配置API(例如logging.config.dictConfig())执行与上述相同的操作。

答案 1 :(得分:4)

如果您希望RootLogger打印日志,请从SQLAlchemy中删除处理程序:

sqla_logger = logging.getLogger('sqlalchemy.engine.base.Engine')
for hdlr in sqla_logger.handlers:
    sqla_logger.removeHandler(hdlr)

使用SQLAlchemy 0.9进行测试