如何抑制 sqlalchemy.engine.base.Engine 记录到标准输出?

Ant*_*ong 4 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=?
Run Code Online (Sandbox Code Playgroud)

我想继续在日志文件中记录这些消息,但想禁止它们打印到标准输出。

Vin*_*jip 6

尝试将 a 添加FileHandlersqlalchemy记录器并将其propagate属性设置为False,例如像这样:

import logging

sqla_logger = logging.getLogger('sqlalchemy')
sqla_logger.propagate = False
sqla_logger.addHandler(logging.FileHandler('/path/to/sqla.log'))
Run Code Online (Sandbox Code Playgroud)

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


小智 5

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

sqla_logger = logging.getLogger('sqlalchemy.engine.base.Engine')
for hdlr in sqla_logger.handlers:
    sqla_logger.removeHandler(hdlr)
Run Code Online (Sandbox Code Playgroud)

使用 SQLAlchemy 0.9 进行测试