我的logging.ini
中有自定义处理程序。这个处理程序要求我传递另一个外部类的方法作为第一个参数。日志记录文档说我可以通过在字符串前加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
答案 0 :(得分:0)
ext://
内容仅适用于基于字典的配置(dictConfig
)和不基于ini文件的配置(fileConfig
),这就是你的意思正在使用。
您可以摆脱错误"'公司'没有定义"通过确保您设置
logging.company = company
在致电fileConfig
之前。但实际上,如果可以的话,最好切换到dictConfig
。