В настоящее время я пытаюсь правильно выровнять поле уровня ведения журнала в моем регистраторе 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, у кого есть способ достичь этого?