处理程序参数中的外部对象
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
。
我的 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
。