setlevel - python logging level values
Cómo alinear a la derecha el campo de nivel en Python logging.Formatter (2)
Actualmente estoy intentando alinear correctamente el campo de nivel de registro en mi registrador de Python para que la salida como:
[2011-10-14 13:47:51] [DEBUG] --- starting... (smtphandlers.py:96)
[2011-10-14 13:47:51] [INFO] --- first things first... (smtphandlers.py:97)
[2011-10-14 13:47:51] [WARNING] --- about to end... (smtphandlers.py:98)
[2011-10-14 13:47:51] [DEBUG] --- ending (smtphandlers.py:99)
en cambio se ve como
[2011-10-14 13:47:51] [ DEBUG] --- starting... (smtphandlers.py:96)
[2011-10-14 13:47:51] [ INFO] --- first things first... (smtphandlers.py:97)
[2011-10-14 13:47:51] [ WARNING] --- about to end... (smtphandlers.py:98)
[2011-10-14 13:47:51] [ DEBUG] --- ending (smtphandlers.py:99)
La línea de formato para el primer bloque es:
logging.Formatter("[%(asctime)s] [%(levelname)s] --- %(message)s (%(filename)s:%(lineno)s)", "%Y-%m-%d %H:%M:%S")
Si sé que la longitud del nivel máximo es 8 (por ejemplo: CRÍTICO), entonces me alinearé a la derecha con 8 espacios. Estoy tratando de averiguar cómo lograr esto. Lo siguiente falla porque "% (levelname) s" tiene más de 8 caracteres (la sustitución no se produce hasta más tarde). Si uso algo como "{0:> 20}". Format "% (levelname) s", entonces funciona, pero eso es más relleno del que necesito o quiero.
logging.Formatter("[%(asctime)s] [" + "{0:>8}".format"%(levelname)s" + "] --- %(message)s (%(filename)s:%(lineno)s)", "%Y-%m-%d %H:%M:%S")
A falta de subclasificar formateador, ¿alguien tiene una manera de lograr esto?
Me gusta esto:
logging.Formatter("[%(asctime)s] [%(levelname)8s] --- %(message)s (%(filename)s:%(lineno)s)", "%Y-%m-%d %H:%M:%S")
Prueba con esta línea de formato:
logging.Formatter("[%(asctime)s] [%(levelname)8s] --- %(message)s (%(filename)s:%(lineno)s)", "%Y-%m-%d %H:%M:%S")
el formateador del registrador de Python utiliza las reglas de formato de cadena de python estándar