2011-10-14 26 views
21

Actualmente estoy tratando de alinear a la derecha del campo de nivel de registro en mi registrador de Python por lo que la producción, tales como:Cómo alinear a la derecha en igualdad de Python logging.Formatter

[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) 

lugar se parece a:

[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é la longitud nivel máximo es de 8 (por ejemplo: CRITICAL), entonces Me alinearé a la derecha en 8 espacios. Estoy tratando de descubrir cómo lograr esto. Lo siguiente falla porque "% (nombre de nivel) s" tiene más de 8 caracteres (la sustitución no ocurre hasta más adelante). Si utilizo algo como "{0:> 20}". Formatee "% (levelname) s", entonces funciona, pero eso es más relleno del que necesito o deseo.

logging.Formatter("[%(asctime)s] [" + "{0:>8}".format"%(levelname)s" + "] --- %(message)s (%(filename)s:%(lineno)s)", "%Y-%m-%d %H:%M:%S") 

¿Corto de formateador de subclases, alguien tiene una manera de lograr esto?

Respuesta

34

De esta manera:

logging.Formatter("[%(asctime)s] [%(levelname)8s] --- %(message)s (%(filename)s:%(lineno)s)", "%Y-%m-%d %H:%M:%S") 
+15

Si desea que INFO quede alineado, puede usar '[% (levelname) -8s]' –

3

Pruebe con esta línea de formato:

logging.Formatter("[%(asctime)s] [%(levelname)8s] --- %(message)s (%(filename)s:%(lineno)s)", "%Y-%m-%d %H:%M:%S") 

pitón registrador formateador utilizar el estándar de Python string formatting rules

+0

'% 8 (levelname) s' no funcionará , necesita ser '% (nombre de nivel) 8s'. – retracile

+0

@retracile: bien, escribí mi respuesta demasiado rápido –

Cuestiones relacionadas