我正在玩Python Logstash Formatter和in 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/