Изменить формат имени в logRecord

Интересно, как я могу изменить формат levelname в logRecoed с помощью пакета регистрации python.

formatter = logging.Formatter('%(levelname)-8s %(message)s')

В принципе, я хочу заменить любое имя журнала на первую букву имени. Например,

INFO -> I, 
WARNING -> W, 
ERROR -> E, 

и др.

Ответ 1

Вы можете использовать поле точности для установки максимальной ширины поля:

formatter = logging.Formatter('%(levelname).1s %(message)s')

.1 устанавливает ширину поля не более одного символа, обрезая уровень до первого символа:

>>> for level in ('CRITICAL', 'ERROR', 'INFO', 'WARNING', 'DEBUG'):
...     print '%(level)-.1s %(message)s' % {'level': level, 'message': 'Hello world!'}
... 
C Hello world!
E Hello world!
I Hello world!
W Hello world!
D Hello world!

См. Документация по операциям форматирования строк:

Конверсия: 's'
Значение: String (преобразует любой объект Python с помощью str()).
Примечания: (6)

  1. [...] Точность определяет максимальное количество используемых символов.

Ответ 2

Если вы хотите совершенно другое имя уровня, используйте logging.addLevelName

logging.addLevelName(logging.DEBUG, 'DETAILED')
logging.addLevelName(logging.INFO, 'GENERAL')