Wie bekomme ich den Namen der Klasse enthält eine logging-Aufruf in Python?
Wenn ich will den Namen der Funktion kann ich einfach %(funcName)s
im Formatierer. Aber wie bekomme ich den Namen der Klasse, in der die Protokollierung der Anruf statt?
Ich habe die Dokumentation für logging
, aber ich finde keine Erwähnung von ihm.
- Der Grund, der name der Klasse ist nicht standardmäßig verfügbar ist, während der name der Funktion ist leicht aus dem frame-Objekt auf dem Stapel -
f.f_code.co_name
- der name der Klasse nicht. Immer den Namen der Klasse verlangen würde, eine Laufzeit-Strafe größer als der entsprechende nutzen - schließlich kann man schon genau sehen, welche Datei und Zeile der call kam von, das ist präziser, als nur die Klasse.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für eine eher einfache, pythonic Weg, um den Namen der Klasse an-Ausgabe mit logger, verwenden Sie einfach eine logging-Klasse.
Durch die Benennung der logger wie oben, die
%(name)s
wird der name der KlasseBeispiel für die Ausgabe
Alternative(s)
Nicht-Vererbung
Es ist fast sicher ein besserer Weg, dies zu tun, aber bis jemand zeigt, dass diese nicht funktionieren wird:
Die Ausgabe ist die folgende:
inspect
zu. Aber es fühlt sich sehr unpythonic. Wäre super wenn es einen Weg gibt, das gleiche zu tun inlogging
statt. Ich kann nicht wirklich denke, dass aus irgendeinem Grund, warum diese Funktionalität nicht da sein sollte.Ich persönlich nur dazu neigen, die Namen meiner Holzfäller nach dem Unterricht, als es macht es viel einfacher auf die Spur, wo sich eine bestimmte Nachricht kam. So können Sie ein root-logger mit dem Namen "top" und für das Modul "a" und der Klasse "testclass", ich nenne mein logger "top.ein.testclass".
Sehe ich nicht die Notwendigkeit, anderweitig abrufen der classname, da die log-Meldung, sollte Ihnen alle Informationen, die Sie benötigen.
@ed ' s Antwort oben, es fühlt sich sehr unpythonic für mich, und es ist nicht etwas, was würde ich sein bequem mit über auf die Produktion-code.
Dies ist eine Funktion, um eine informative Nachricht im Protokoll über die Vertretung der Klasse Methode:
https://docs.python.org/3/library/functions.html#repr
Diese umgesetzt werden können, um jede Klasse mit einem mix-in:
Können Sie als verbunden sein mit einer Klasse mit Mehrfachvererbung:
Nutzung