76 votes

Comment définir les timestamps sur GMT/UTC sur le logging Python ?

Est-il possible, et comment, de régler le fuseau horaire de l'enregistrement sur GMT ?

(c'est-à-dire le %(asctime)s dans le format)

101voto

Sven Marnach Points 133943
logging.Formatter.converter = time.gmtime

(documenté dans la docstring de logging.Formatter.formatTime )

8voto

dcordz Points 53

Extrait de la documentation de python 3 :

import time

class UTCFormatter(logging.Formatter):
    converter = time.gmtime

https://docs.python.org/3/howto/logging-cookbook.html#formatting-times-using-utc-gmt-via-configuration

7voto

rakslice Points 1939

Il suffit de mettre logging.Formatter.converter = time.gmtime est inefficace pour moi dans Python 2.5.

J'ai donc créé une classe enfant avec ce paramètre, et je l'utilise à la place de logging.Formatter :

class UTCFormatter(logging.Formatter):
    converter = time.gmtime

3voto

Vlad Gulin Points 111

Voici un exemple de code :

import logging, logging.handlers
import time

logit = logging.getLogger('logit')
handler = logging.handlers.RotatingFileHandler("file.log", maxBytes=20000, backupCount=5)
handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s %(levelname)8s: %(message)s')
handler.setFormatter(formatter)
logging.Formatter.converter = time.gmtime
logit.addHandler(handler)

logit.info("test log message")

Sortie :

2019-11-14 16:34:22,967     INFO: test log message

-3voto

dijxtra Points 759

J'ai eu des problèmes avec ces deux réponses. J'ai donc simplement changé le fuseau horaire global pour l'ensemble du script :

os.environ['TZ'] = 'Europe/London'
time.tzset()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X