我正在玩Python Logstash Formatterin its wiki它建议为格式化程序设置以下选项:

"formatters": { "logstash":{ "()": "logstash_formatter.LogstashFormatter" } }

这对我很有用,但是我不确定空括号是用来做什么的,或者在这个例子中logstash_formatter.LogstashFormatter到底被设置成了什么。
有人能向我解释一下这里的空括号对于Python记录器意味着什么吗?看起来它几乎是一个空元组,只是我不知道如何设置一个空元组到一个类。

最佳答案

如果您查看python docs for logging,您将看到:
要配置的对象由详细描述其配置的字典描述。在某些地方,日志系统将能够从上下文推断一个对象如何被实例化,但是当一个用户定义的对象被实例化时,系统将不知道如何做到这一点。为了为用户定义的对象实例化提供完全的灵活性,用户需要提供一个“工厂”-一个可调用的,它用配置字典调用,并返回实例化对象。这是由一个到工厂的绝对导入路径发出的信号,该路径在特殊键'()'下可用。
基本上它的意思是logstash_formatter.LogstashFormatter是要创建新格式化程序的工厂。因此,当日志框架想要创建格式化程序时,它将确保import logstash_formatter然后执行类似logstash_formatter.LogstashFormatter(*args, **kwargs)的操作。
事实上,如果你use the source, Luke,你可以看到
The value is extracted
Then resolved/imported
以及the created factory is used here

if '()' in config:
    factory = config['()'] # for use in exception handler

And later the factory is called with kwargs
    result = factory(**kwargs)

关于python - 日志配置字典中的空括号“()”是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38729099/

10-11 22:11
查看更多