4 Stimmen

Die Protokollierungsattribut asctime erzeugen die lokale Zeit

Ich verwende das Logging für mein Projekt und das Format ist

'format': '%(asctime)s %(message)s'

allerdings entspricht die Zeit nicht meiner lokalen Zeit. z.B.

2013-01-08 11:04:07,383 Nachricht (dies ist die UTC-6 Zeit)

Ich möchte wissen

  1. wie man mit meiner lokalen Zeit protokolliert
  2. wie man das Zeitformat auf 2013-01-08 11:04:07 ändert

Ich habe es behoben, das Problem ist, dass ich die Zeitzone in setting.py einstellen muss !!!

9voto

abarnert Punkte 332066

Von den Docs:

Klasse logging.Formatter(fmt=None, datefmt=None)

Gibt eine neue Instanz der Klasse Formatter zurück. Die Instanz wird mit einem Formatstring für die Nachricht als Ganzes initialisiert, sowie mit einem Formatstring für den Datum/Uhrzeit-Teil einer Nachricht. Wenn kein fmt angegeben ist, wird '%(message)s' verwendet. Wenn kein datefmt angegeben ist, wird das ISO8601-Datumformat verwendet.

Auch:

Wenn der Formatierungsstring '(asctime)' enthält, wird formatTime() aufgerufen, um die Ereigniszeit zu formatieren.

Also, Sie können entweder einen datefmt angeben oder eine benutzerdefinierte Formatter-Unterklasse mit Ihrer eigenen formatTime-Überschreibung erstellen.

Und wenn Sie zwischen Lokalzeit und GMT-Zeit (oder etwas anderem) wählen möchten:

Standardmäßig wird time.localtime() verwendet; um dies für eine bestimmte Formatter-Instanz zu ändern, setzen Sie das converter-Attribut auf eine Funktion mit derselben Signatur wie time.localtime() oder time.gmtime(). Um dies für alle Formatter zu ändern, z.B. wenn Sie wollen, dass alle Log-Zeiten in GMT angezeigt werden, setzen Sie das converter-Attribut in der Formatter-Klasse.

Die Argumente format und datefmt können auch an basicConfig übergeben werden, wenn Sie keinen expliziten Formatter verwenden. Auf diese Weise können Sie keinen converter setzen - aber das müssen Sie auch nicht, da die Standardeinstellung die Lokalzeit ist.

Also:

logging.basicConfig(format='%(asctime)s %(message)s',
                    datefmt='%Y-%m-%d %H:%M:%S')
log = logging.getLogger(__name__)
log.error('Out of cheese!')

Ich habe dies um 16:11:30 Uhr Ortszeit ausgeführt, und die Ausgabe ist:

2013-01-08 16:11:30 Out of cheese!

Tatsächlich sieht es so aus, als ob Sie nur die Millisekunden aus dem Standard-Zeitformat entfernen wollen, was Sie noch einfacher tun können, indem Sie einfach den String abschneiden:

logging.basicConfig(format='%(asctime)-.19s %(message)s')

Jedoch finde ich es sinnvoller, das Datumsformat explizit anzugeben.

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