¿Cómo personalizar el formato de hora para el registro de Python?

Resuelto Hai Vu asked hace 14 años • 6 respuestas

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.

Hai Vu avatar Jul 11 '10 00:07 Hai Vu
Aceptado

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")
Metalshark avatar Jul 10 '2010 18:07 Metalshark

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
Ben avatar May 26 '2014 16:05 Ben

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
cripton avatar May 25 '2011 15:05 cripton

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:

ingrese la descripción de la imagen aquí



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:

ingrese la descripción de la imagen aquí

Amar Kumar avatar Mar 31 '2021 12:03 Amar Kumar