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.
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:
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: Ссылка
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: