Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 两个塔架记录器处理器(哨兵/乌鸦和控制台),用于相同的qualname_Python_Logging_Pylons_Sentry_Raven - Fatal编程技术网

Python 两个塔架记录器处理器(哨兵/乌鸦和控制台),用于相同的qualname

Python 两个塔架记录器处理器(哨兵/乌鸦和控制台),用于相同的qualname,python,logging,pylons,sentry,raven,Python,Logging,Pylons,Sentry,Raven,我有一个塔架/涡轮齿轮应用程序。我想记录相同的日志(由qualname属性指定)以使用两个不同的日志处理程序,每个处理程序都有自己的日志级别 Sentry/Raven记录器应仅接收WARN+级别SQLAlchemy消息,控制台记录器应接收INFO+级别SQLAlchemy消息 这是我的缩写ini文件: [loggers] keys = root, sqlalchemy_console, sqlalchemy_sentry [handlers] keys = console, sentry [

我有一个塔架/涡轮齿轮应用程序。我想记录相同的日志(由
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\u sqlalchemy\u哨兵
似乎覆盖了
logger\u sqlalchemy\u控制台
并窃取了它的消息。无论记录器在ini文件中的顺序如何,都会发生这种情况

是否可以使用挂架将同一记录器/qualname记录到不同级别的多个位置


如果是这样,哨兵/乌鸦有可能成为伐木工人之一吗?我的ini文件是否有问题,或者Raven中是否存在错误?

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

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


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

你把记录器和处理程序搞混了-正如
TokenMacGuy
所说,你需要两个名为
sqlalchemy.engine
的记录器处理程序。将
StreamHandler
(控制台)配置为level
INFO
,将
SentryHandler
(sentry)配置为level
WARNING
,将
sqlalchemy.engine
记录器配置为level
DEBUG
INFO
。然后你应该得到想要的结果。(即使记录了
DEBUG
消息,处理程序上的级别也会阻止它们发出低于其级别的事件。)


除非您仅限于Python2.6或更早版本,否则如果可以的话,最好使用
logging.config.dictConfig
API而不是
logging.config.fileConfig
。与旧的
fileConfig
API相比,
dictConfig
API允许更好地控制日志配置,后者将不再进一步开发。

创建一个具有警告级别的sentry\u sqlalchemy处理程序正是我所需要的。感谢您帮助我了解配置。