¿Cómo personalizar el formato de hora para el registro de Python?
Soy nuevo en el paquete de registro de Python y planeo usarlo para mi proyecto. Me gustaría personalizar el formato de hora 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 de hora a solo: ' 2010-07-10 10:46:28
', eliminando el sufijo de milisegundos. Miré Formatter.formatTime, pero estoy confundido.
De la documentación oficial sobre la clase Formatter:
El constructor toma dos argumentos opcionales: una cadena con formato de mensaje y una cadena con 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")
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 sola línea. Un registro de registro resultante tiene el siguiente aspecto:
2014-05-26 12:22:52.376 CRITICAL historylistener - main: History log failed to start
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
Pruebe estos formatos:
Formato 1:
'formatters': {
'standard': {
'format' : '%(asctime)s |:| LEVEL: %(levelname)s |:| FILE PATH: %(pathname)s |:| FUNCTION/METHOD: %(funcName)s %(message)s |:| LINE NO.: %(lineno)d |:| PROCESS ID: %(process)d |:| THREAD ID: %(thread)d',
'datefmt' : "%y/%b/%Y %H:%M:%S"
},
}
Salida del formato 1:
Formato 2:
'formatters': {
'standard': {
'format' : '%(asctime)s |:| LEVEL: %(levelname)s |:| FILE PATH: %(pathname)s |:| FUNCTION/METHOD: %(funcName)s %(message)s |:| LINE NO.: %(lineno)d |:| PROCESS ID: %(process)d |:| THREAD ID: %(thread)d',
'datefmt' : "%Y-%m-%d %H:%M:%S"
},
}
Salida del formato 2: