270 votes

Comment personnaliser le format de l'heure pour la journalisation Python?

Je suis nouveau dans le package de journalisation de Python et je prévois de l’utiliser pour mon projet. J'aimerais personnaliser le format de l'heure à mon goût. Voici un code court que j'ai copié à partir d'un tutoriel:

 import logging

# create logger
logger = logging.getLogger("logging_tryout2")
logger.setLevel(logging.DEBUG)

# create console handler and set level to debug
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)

# create formatter
formatter = logging.Formatter("%(asctime)s;%(levelname)s;%(message)s")

# add formatter to ch
ch.setFormatter(formatter)

# add ch to logger
logger.addHandler(ch)

# "application" code
logger.debug("debug message")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
logger.critical("critical message")
 

Et voici la sortie:

 2010-07-10 10:46:28,811;DEBUG;debug message
2010-07-10 10:46:28,812;INFO;info message
2010-07-10 10:46:28,812;WARNING;warn message
2010-07-10 10:46:28,812;ERROR;error message
2010-07-10 10:46:28,813;CRITICAL;critical message
 

Je voudrais raccourcir le format de l'heure à seulement: ' 2010-07-10 10:46:28 ', en supprimant le suffixe mili-seconde. J'ai regardé le Formatter.formatTime, mais confus. J'apprécie votre aide pour atteindre mon objectif. Je vous remercie.

292voto

Metalshark Points 3090

De la documentation officielle concernant la classe Formatter:

Le constructeur prend deux arguments facultatifs: une chaîne de format de message et une chaîne de format de date.

Alors change

 # create formatter
formatter = logging.Formatter("%(asctime)s;%(levelname)s;%(message)s")
 

à

 # create formatter
formatter = logging.Formatter("%(asctime)s;%(levelname)s;%(message)s",
                              "%Y-%m-%d %H:%M:%S")
 

229voto

Ben Points 50

À l'aide de logging.basicConfig, l'exemple suivant fonctionne pour moi:

 logging.basicConfig(filename='HISTORYlistener.log',level=logging.DEBUG,
        format='%(asctime)s.%(msecs)d %(levelname)s %(module)s - %(funcName)s: %(message)s', datefmt="%Y-%m-%d %H:%M:%S")
 

Cela vous permet de formater et de configurer tout en une seule ligne. Un enregistrement de journal résultant se présente comme suit:

2014-05-26 12: 22: 52.376 CRITICAL historylistener - main: le journal de l'historique n'a pas pu démarrer

36voto

cripton Points 86

si vous utilisez logging.config.fileConfig avec un fichier de configuration, utilisez quelque chose comme:

 [formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=%Y-%m-%d %H:%M:%S
 

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