Wie bekomme ich den Namen der Klasse, die einen Protokollierungsaufruf in Python enthält?

8

Wenn ich den Funktionsnamen haben möchte, kann ich einfach %(funcName)s in den Formatierer einfügen. Aber wie bekomme ich stattdessen den Namen der Klasse, die den Protokollierungsaufruf enthält?

Ich habe die Dokumentation für logging durchgesehen, aber ich kann keine Erwähnung finden.

    
c00kiemonster 12.09.2011, 08:18
quelle

4 Antworten

8

Um einen einfachen, pythischen Weg zu finden, den Klassennamen mit Ihrem Logger auszugeben, verwenden Sie einfach eine Protokollierungsklasse.

%Vor%

Wenn Sie den Logger wie oben angegeben benennen, ist %(name)s der Name Ihrer Klasse

Beispielausgabe

%Vor%

Alternative (n)

Nichtvererbung

%Vor%     
kylehuff 03.02.2016 12:45
quelle
2

Es gibt fast sicher einen besseren Weg, dies zu tun, aber bis jemand darauf hinweist, wird dies funktionieren:

%Vor%

Die Ausgabe davon ist die folgende:

%Vor%     
ed. 12.09.2011 09:14
quelle
0

Ich persönlich tendiere dazu, meine Logger nach den Klassen zu benennen, da es viel einfacher ist herauszufinden, woher eine bestimmte Nachricht kommt. So können Sie einen Root-Logger namens "top" haben, und für das Modul "a" und die Klasse "testclass", ich meine Logger "top.a.testclass".

Ich sehe keine Notwendigkeit, den Klassennamen anderweitig abzurufen, da die Protokollnachricht Ihnen alle Informationen geben soll, die Sie benötigen.

@ eds Antwort oben, es fühlt sich sehr unpythonisch an und es ist nicht etwas, womit ich mich bei der Verwendung von Produktionscode zufrieden geben würde.

    
Tourman 12.09.2011 14:09
quelle
0

Dies ist eine Funktion zum Erstellen einer informativen Protokollnachricht mit der Repräsentationsklassenmethode:

Ссылка

%Vor%

Dies kann für jede Klasse mit einem Mix-in implementiert werden:

%Vor%

Sie können dann einer Klasse mit Mehrfachvererbung zugeordnet werden:

%Vor%

Verwendung

%Vor%     
Joe Heffer 19.02.2018 14:00
quelle

Tags und Links