【问题标题】:external object in args of handler处理程序 args 中的外部对象
【发布时间】:2015-01-30 02:14:29
【问题描述】:

我的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

【问题讨论】:

    标签: python logging


    【解决方案1】:

    ext:// 的东西只适用于基于字典的配置 (dictConfig),而 基于 ini 文件的配置 (fileConfig),这是您正在使用的。

    您可以通过确保您设置来摆脱错误“'company' is not defined”

    logging.company = company
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-09
      • 1970-01-01
      • 2020-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-22
      • 1970-01-01
      相关资源
      最近更新 更多