В настоящее время я пытаюсь выровнять поле уровня ведения журнала в моем регистраторе 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 (например, КРИТИЧЕСКИЙ), тогда я выровняю по правому краю 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, у кого-нибудь есть способ добиться этого?