在 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')
获取新的记录器。
我在 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')
获取新的记录器。