在 Pyramid 应用程序中记录到 SQLAlchemy 记录器

Logging to SQLAlchemy logger in Pyramid app

我在 development.ini 中定义了 SQA 记录器以将 SQA 查询记录到单独的文件中,如下所示:

[handler_sqa]
class = FileHandler
args = ('%(here)s/log/sqlalchemy.log','a')
# "level = INFO" logs SQL queries.
# "level = DEBUG" logs SQL queries and results.
# "level = WARN" logs neither.  (Recommended for production systems.)
level = INFO
formatter = generic    


[logger_sqlalchemy]
level = INFO
handlers = sqa
qualname = sqlalchemy.engine.base.Engine
propagate = 0

现在,它可以工作了,也就是说,SQA 只记录到那个文件。

但是,我还希望这个特定的记录器将其他消息记录到 SQA 日志,即记录到文件 log/sqlalchemy.log。我可以像这样得到似乎是 SQA 记录器的东西:

sqa_log = logging.getLogger('logger_sqlalchemy')

但是,它记录到主(即 root)记录器而不是..

如何将其他消息记录到 SQA 记录器实例而不是根记录器?

记录器配置为处理前缀为 sqlalchemy.engine.base.Engine 的任何内容。因此,您可以制作一个新的记录器 logging.getLogger('sqlalchemy.engine.base.Engine.foo'),但我认为为了您自己的目的劫持 sqlalchemy 命名空间是一种糟糕的做法。或者我认为你应该定义一个不同的记录器,它也共享 sqa 处理程序。

[handler_sqa]
# all the same

[logger_myown]
handlers = sqa
propagate = 0
qualname = mysqa

您可以通过 logging.getLogger('mysqa') 获取新的记录器。