Weird: Logger verwendet nur den Formatierer des ersten Handlers für Ausnahmen

8

Ich beobachte, wie sich das Protokollierungsmodul auf komische Weise verhält. Fehle ich etwas?

Ich mache das Übliche, zwei Handler zu haben: einen StreamHandler, um nur INFO und höher auf der Konsole zu loggen, und einen FileHandler, der auch alle DEBUG-Informationen behandelt.

Es hat gut funktioniert, bis ich mich entschieden habe, ein anderes Format für die Ausnahmen zu haben. Ich wollte einen vollständigen StackTrace in der Datei, aber nur den Ausnahmetyp und -wert auf der Konsole. Da Handler eine setFormatter-Funktion haben, und da es leicht ist, eine Unterklasse von logging.Formatter zu schreiben, dachte ich, es würde funktionieren.

Der Konsolen-Handler und der Datei-Handler haben beide ihren eigenen Formatierer. Die print-Anweisungen im Code belegen dies. Der Aufruf von logger.exception verwendet jedoch nur die formatException des ersten Handlers, der hinzugefügt wurde & gt; Die Ausnahme wird in der Datei mit dem Format protokolliert, das sie in der Konsole haben sollte. Ändern Sie die Reihenfolge der Zeilen logger.addHandler, und dann ist es das FormatException des Dateihandlers, der überall verwendet wird.

%Vor%

Was ist los?

EDIT: Ich benutze Python 2.6 übrigens. EDIT: Typo in Code über "console_formatter" Variablenname korrigiert.

    
Niriel 03.05.2011, 20:20
quelle

3 Antworten

5

Ich habe dein Problem gefunden! Wenn Sie in logger/__init__.py im Quelltext für Formatter.format suchen, sehen Sie in Zeile 440 (für py2.6) Folgendes:

%Vor%

Dies trifft in Ihrem Fall nicht zu, da Sie formatException außer Kraft setzen. Wenn Sie das if not record.exc_text auskommentieren (und den Einzug entsprechend korrigieren), scheint es wie erwartet zu funktionieren.

Der Fehler scheint hier bereits gemeldet zu sein: Ссылка

    
Mu Mind 03.05.2011, 22:33
quelle
8

Dies ist der Code, den ich mir ausgedacht habe. Es macht den Job:).

%Vor%     
Niriel 04.05.2011 06:40
quelle
1

Als ich den Code das erste Mal ausgeführt habe, habe ich eine Rückverfolgung erhalten:

%Vor%

Das ist wahrscheinlich die Ursache des Problems. Die Formate waren korrekt, als ich den console_handler code änderte:

%Vor%     
Velociraptors 03.05.2011 21:04
quelle

Tags und Links