4 Stimmen

Wie konfiguriere ich das Format der Python 2.3 Logging-Meldungen?

In Python 2.4 und höher ist es einfach, das Logging-Modul so zu konfigurieren, dass es eine einfachere Formatierung hat:

logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s")

aber für Anwendungen, die Python 2.3 unterstützen müssen, scheint es schwieriger zu sein, da die Logging-API in Py2.4 überarbeitet wurde. Insbesondere nimmt basicConfig keine Argumente entgegen. Wenn ich eine Variation des einzigen Beispiels in der Py2.3-Dokumentation ausprobiere, erhalte ich folgendes:

try:
    logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s")
except:
    logging.getLogger().setLevel(opts.LOGLEVEL)
    h = logging.StreamHandler()
    h.setFormatter(logging.Formatter("%(message)s"))
    logging.getLogger().addHandler(h)

aber der Aufruf dieses Root-Loggers in Py2.3, z.B.

logging.info("Foo")

ergibt eine doppelte Ausgabe:

Foo
INFO:root:Foo

Ich kann nicht finden, eine Möglichkeit, das Format der vorhandenen Handler auf der Root-Logger in Py2.3 (der "außer" Block oben) zu ändern, daher der "addHandler" Aufruf, die die doppelte Ausgabe produziert. Gibt es eine Möglichkeit, das Format der Root-Logger ohne diese Verdoppelung zu setzen? Vielen Dank!

4voto

Denis Otkidach Punkte 30334

except: ohne Ausnahme Klasse[n] ist ein guter Weg, um in Schwierigkeiten zu geraten. Ich glaube logging Modul in Python 2.3 hat basicConfig() Funktion, jedoch mit weniger Optionen. Da sie akzeptiert **kwargs Es kann jeden Moment ausfallen, nachdem es eine Aufgabe erledigt hat. Ich denke, es hat bereits einen Handler mit Standardformat installiert und ist dann bei der Konfiguration von etwas gescheitert. Nach dem Abfangen der Ausnahme haben Sie einen anderen Handler installiert. Wenn Sie 2 Handler haben, erhalten Sie 2 Meldungen für jedes Ereignis. Der einfachste Weg in Ihrem Fall: Vermeiden Sie die Verwendung von basicConfig() überhaupt nicht und konfigurieren logging manuell. Und verwenden Sie niemals except: wenn Sie nicht wieder erhöhen oder eine aufgefangene Ausnahme protokollieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X