python - 两个 Pylons 记录器处理程序(Sentry/Raven 和控制台)用于相同的 qualname

标签 python logging pylons sentry raven

我有一个 Pylons/TurboGears 应用程序。我想记录同一个记录器(由 qualname 属性指定)以使用两个不同的日志处理程序,每个处理程序都有自己的日志级别。

Sentry/Raven 记录器应该只接收 WARN+ 级别的 SQLAlchemy 消息,而控制台记录器应该接收 INFO+ 级别的 SQLAlchemy 消息。

这是我的缩写 ini 文件:

[loggers]
keys = root, sqlalchemy_console, sqlalchemy_sentry

[handlers]
keys = console, sentry

[formatters]
keys = generic

[logger_root]
level = INFO
handlers = console, sentry

[logger_sqlalchemy_console]
level = INFO
handlers = console
qualname = sqlalchemy.engine
propagate = 0

[logger_sqlalchemy_sentry]
level = WARN
handlers = sentry
qualname = sqlalchemy.engine
propagate = 0

但是,logger_sqlalchemy_sentry 似乎覆盖了 logger_sqlalchemy_console 并窃取了其消息。无论 ini 文件中记录器的顺序如何,都会发生这种情况。

是否可以使用 Pylons 将相同的记录器/限定名记录到不同级别的多个位置?

如果是这样,Sentry/Raven 是否有可能成为这些记录器之一?我的 ini 文件有问题吗,或者 Raven 中有错误吗?

最佳答案

您遇到的问题是您配置了 sqlalchemy.engine Logger 两次。记录器部分对应于 logging.Logger 的实例,即由 logging.getLogger(qualname) 返回的内容。该调用只能返回一个对象,您不可能使用相同的限定名设置多个对象。

您需要的是该记录器的多个处理程序,就像您为根记录器提供多个处理程序一样。然后,您可以在各个处理程序上指定所需的日志级别。

不幸的是,fileConfig() 并没有为您提供一种简单的方法来配置具有不同日志级别的相同处理程序,具体取决于发起记录的记录器,您需要设置重复的处理程序根记录器和 sqlalchemy.engine 记录器的部分,以便为它们提供不同的日志级别。

关于python - 两个 Pylons 记录器处理程序(Sentry/Raven 和控制台)用于相同的 qualname,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18404258/

相关文章:

iis - Umbraco 网站和 IIS 日志记录

python - Pylons:与外部库共享 SQLAlchemy MySQL 连接

python - 如何通过python在选定的Gmail邮箱中存档电子邮件

python - 在 Python 中为 edmonds karp 最大流量算法创建容量图

python - 如何使用不会引起 PEP 警告的选项卡

mysql - 将具有相同列的不同 MySQL 表上的数据组合并合并为唯一行并对其运行查询

python - Python 中类型的字符串表示

java - 在 Maven Invoker 测试中禁用 'downloaded' 日志

python - 导入模型/库类并从 Controller 调用

python - Pylons Web 应用程序的最小 Linux?