2016-08-02 6 views
1

Ich spiele mit dem Python Logstash Formatter um und in its wiki es für die Formatierer die folgende Option empfohlene Einstellung:Was bedeutet eine leere Klammer "()" im Logging Config Dictionary?

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

Dies ist für mich zu arbeiten, aber ich bin nicht sicher, was die leeren Klammern sind für, oder was genau logstash_formatter.LogstashFormatter wird in diesem Beispiel auf gesetzt.

Kann mir jemand erklären, was die leeren Klammern hier in Bezug auf den Python Logger bedeuten? Es scheint fast so, als wäre es ein leeres Tupel, außer dass ich mir nicht vorstellen kann, wie ein leeres Tupel zu einer Klasse gesetzt werden würde.

Antwort

3

Wenn Sie die python docs for logging überprüfen, werden Sie sehen:

Objekte konfiguriert werden sollen, durch Wörterbücher beschrieben, die detailliert deren Konfiguration. An einigen Stellen kann das Protokollierungssystem aus dem Kontext schließen, wie ein Objekt instanziiert werden soll. Wenn jedoch ein benutzerdefiniertes Objekt instanziiert werden soll, weiß das System nicht, wie dies zu tun ist. Um eine vollständige Flexibilität bei der Instanziierung benutzerdefinierter Objekte zu ermöglichen, muss der Benutzer eine "Factory" bereitstellen - eine Aufruffunktion, die mit einem Konfigurationswörterbuch aufgerufen wird und das instanziierte Objekt zurückgibt. Dies wird durch einen absoluten Importpfad zur Fabrik signalisiert, der unter dem speziellen Schlüssel '()' zur Verfügung gestellt wird.

Grundsätzlich bedeutet das, dass logstash_formatter.LogstashFormatter die Fabrik ist, die einen neuen Formatierer erstellen wird. Wenn das Protokollierungs-Framework also einen Formatierer erstellen möchte, wird es sicher import logstash_formatter und dann etwas wie logstash_formatter.LogstashFormatter(*args, **kwargs) tun.

der Tat, wenn Sie use the source, Luke, können Sie sehen, dass

+0

Arg ich das irgendwie verpasst, wenn ich durch die Protokollierung docs lesen. Vielen Dank! –

+0

Ich fand es, als ich auf die Logging-Konfigurationsseite ging und nach '()' suchte :) –

+0

Lol gut, wenn Sie '' '' 'suchen, erhalten Sie auch leere Funktionsdeklarationen. Ich war gestern besonders beunruhigt, so dass ich wahrscheinlich nur ungeduldig war –