处理程序参数中的外部对象

external object in args of handler

我的 logging.ini 中有一个自定义处理程序。这个处理程序要求我传递另一个外部 class 的方法作为第一个参数。日志文档说我可以通过在字符串前加上 ext:// 来引用外部对象: access to external objects docs

所以我正在尝试这样的事情:

[handler_rabbitHandler]
class=company.common.logger.GELFRabbitHandler
level=DEBUG
formatter=simpleFormatter
args=('ext://company.common.logger.AMQPFactory.get_connection',)

但在 args 的情况下,ext:// 似乎没有按照文档中的描述进行解析。有没有办法在 args 中引用外部对象的方法?

注:

许多示例在 args 中显示 sys.stdout,例如:

args=(sys.stdout,)

如果我对我们的自定义对象进行相同的尝试,我会收到导入错误,但我不知道如何将其导入到日志记录的命名空间中:

args=(company.common.logger.AMQPFactory.get_connection,)

结果:

NameError: name 'company' is not defined

ext:// 仅适用于基于字典的配置 (dictConfig),不适用于 基于 ini 文件的配置 (fileConfig) ,这就是您正在使用的。

您可以通过确保设置

来消除错误“'company' 未定义”
logging.company = company

在调用 fileConfig 之前。但实际上,如果可以的话,你最好切换到 dictConfig