Подтвердить что ты не робот

Как правильно выравнивать поле уровня в Python logging.Formatter

В настоящее время я пытаюсь правильно выровнять поле уровня ведения журнала в моем регистраторе Python, так что вывод, например:

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

выглядит следующим образом:

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

Строка формата для первого блока:

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

Если я знаю, что максимальная длина уровня равна 8 (например: CRITICAL), тогда я буду выравниваться вправо до 8 пробелов. Я пытаюсь понять, как этого добиться. Следующая ошибка возникает из-за того, что "% (levelname) s" имеет более 8 символов (замена не происходит до поздней). Если я использую что-то вроде "{0: > 20}". Format "% (levelname) s", то он работает, но это больше дополнений, чем мне нужно или нужно.

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

За исключением подкласса Formatter, у кого есть способ достичь этого?

4b9b3361

Ответ 1

Вот так:

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

Ответ 2

Попробуйте использовать следующую строку формата:

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

Python Logger Formatter использовать стандартные правила Python форматирования строк