2011-10-14 11 views
21

Jestem obecnie próbuje prawo wyrównać pole poziom rejestrowania w moim Pythona rejestrator tak, że produkcja takich jak:Jak prawo wyrównać warunki konkurencji w Pythonie 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) 

zamiast wygląda następująco:

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

linia format bloku pierwszego jest:

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

Wiedząc, długość Maksymalny poziom wynosi 8 (np krytyczny), a następnie Będę wyrównany do 8 spacji. Próbuję dowiedzieć się, jak to osiągnąć. Następujące błędy nie powiodły się, ponieważ "% (levelname) s" ma więcej niż 8 znaków (podstawienie nie nastąpi później). Jeśli użyję czegoś w rodzaju "{0:> 20}" .format "% (levelname) s", to działa, ale jest to bardziej dopełnienie niż potrzebuję lub chcę.

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

Skrót od podklasy Formatter, każdy ma sposób na osiągnięcie tego?

Odpowiedz

34

Jak to:

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

Jeśli chcesz mieć wyrównane do lewej strony, możesz użyć '[% (levelname) -8s]' –

3

Spróbuj z tej linii formatu:

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

pyton rejestrator formater użyć standardowej Pythona string formatting rules

+0

'% 8 (levelName) s' nie zadziała , musi to być '% (levelname) 8s'. – retracile

+0

@retracile: tak, pisałem swoją odpowiedź zbyt szybko –