multiple - python logging example
¿Cómo personalizar el formato de hora para el registro de Python? (4)
De la documentación oficial sobre la clase de formateador:
El constructor toma dos argumentos opcionales: una cadena de formato de mensaje y una cadena de formato de fecha.
Entonces cambia
# create formatter
formatter = logging.Formatter("%(asctime)s;%(levelname)s;%(message)s")
a
# create formatter
formatter = logging.Formatter("%(asctime)s;%(levelname)s;%(message)s",
"%Y-%m-%d %H:%M:%S")
Soy nuevo en el paquete de registro de Python y planeo usarlo para mi proyecto. Me gustaría personalizar el formato de tiempo a mi gusto. Aquí hay un código corto que copié de un tutorial:
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")
Y aquí está el resultado:
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
Me gustaría acortar el formato del tiempo para simplemente '' 2010-07-10 10:46:28
'', dejando caer el sufijo mili-segundo. Miré el Formatter.formatTime, pero confundido. Agradezco tu ayuda para lograr mi objetivo. Gracias.
Para agregar a las otras respuestas, aquí están las listas de variables de la documentación de Python.
Directive Meaning Notes
%a Locale’s abbreviated weekday name.
%A Locale’s full weekday name.
%b Locale’s abbreviated month name.
%B Locale’s full month name.
%c Locale’s appropriate date and time representation.
%d Day of the month as a decimal number [01,31].
%H Hour (24-hour clock) as a decimal number [00,23].
%I Hour (12-hour clock) as a decimal number [01,12].
%j Day of the year as a decimal number [001,366].
%m Month as a decimal number [01,12].
%M Minute as a decimal number [00,59].
%p Locale’s equivalent of either AM or PM. (1)
%S Second as a decimal number [00,61]. (2)
%U Week number of the year (Sunday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Sunday are considered to be in week 0. (3)
%w Weekday as a decimal number [0(Sunday),6].
%W Week number of the year (Monday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Monday are considered to be in week 0. (3)
%x Locale’s appropriate date representation.
%X Locale’s appropriate time representation.
%y Year without century as a decimal number [00,99].
%Y Year with century as a decimal number.
%z Time zone offset indicating a positive or negative time difference from UTC/GMT of the form +HHMM or -HHMM, where H represents decimal hour digits and M represents decimal minute digits [-23:59, +23:59].
%Z Time zone name (no characters if no time zone exists).
%% A literal ''%'' character.
Usando logging.basicConfig, el siguiente ejemplo funciona para mí:
logging.basicConfig(
filename=''HISTORYlistener.log'',
level=logging.DEBUG,
format=''%(asctime)s.%(msecs)03d %(levelname)s %(module)s - %(funcName)s: %(message)s'',
datefmt="%Y-%m-%d %H:%M:%S")
Esto le permite formatear y configurar todo en una línea. Un registro de registro resultante se ve de la siguiente manera:
2014-05-26 12: 22: 52.376 historylistener CRÍTICO - principal: el registro de historial no se pudo iniciar
si usa logging.config.fileConfig con un archivo de configuración, use algo como:
[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=%Y-%m-%d %H:%M:%S