Ich stoße auf ein Problem mit dem Protokollierungsmodul von Python 2.7. Mein System ist Ubuntu 14.04 64bit, und ich lebe in Italien (derzeit UTC + 1, keine Sommerzeit); Das System ist ordnungsgemäß als solches konfiguriert.
Ich möchte Protokollzeilen in der aktuellen Zeitzone ausgeben, die korrekte Zeitzonen-Offset-Informationen enthalten.
Betrachten Sie das folgende Snippet:
%Vor%Was zu diesem Ergebnis führt:
%Vor%Also, das System kennt die richtige Zeit UND Offset, während Python scheint die Zeit falsch zu verstehen.
In Datetime-Dokumenten heißt es, dass für% z in strftime das Ergebnis "UTC-Offset in der Form + HHMM oder -HHMM (leere Zeichenfolge, wenn das Objekt naiv ist)" ist.
Ich hätte also eines der folgenden Ergebnisse erwartet:
Im Gegenteil, hier scheint ich ein unberechenbares - und eindeutig falsches - Ergebnis zu bekommen. Was geht? Ist es möglich, das Logging-Modul zu konfigurieren, was ich will OHNE die Konverterfunktion der Protokollierung zu überschreiben.Formatter-Objekte (wo kann ich natürlich tun, was ich will, aber das sieht einfach ein Fehler für mich aus)?
logging
verwendet das Modul time
, das die Zeitzone nicht in einem Zeittupel speichert und time.strftime()
im Gegensatz zu datetime.strftime()
unterstützt nicht %z
auf Python 2. Sie können Formatter.formatTime()
Methode überschreiben, um Zeitzone zu verwenden -aware datetime objects als @dmg vorgeschlagen stattdessen:
BEARBEITEN:
Sie können den Zeitformatierer wie folgt einstellen:
um Ortszeit zu erhalten.
Oder:
%Vor%um UTC zu bekommen.
Wie für die lokale Zeit + Zeitzone verwendet logging.Formatter
zuerst die Zeit, die Sie als sehen können hier unterstützt TZ nicht wirklich (siehe Fußnote).
Die sauberste Alternative wäre, einen eigenen Formatierer zu schreiben, der datetime
verwendet, was anscheinend ziemlich genau dummer Weg TZ zu verwenden. Um Ihr Objekt "bewusst" zu machen, würde ich mit pytz gehen.
Tags und Links python datetime logging python-2.7