Частичное форматирование строк в средствах форматирования журналов Python - PullRequest
5 голосов
/ 24 августа 2011

Я ищу способ выполнить частичное форматирование строки в средствах форматирования журналов Python.

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

formatter = logging.Formatter('[num-%d] %(levelname)s %(message)s' % (num,))

Я получу TypeError с «формат требует сопоставления», что разумно, поскольку интерпретатор не может найти «имя уровня» и «сообщение».

Конечно, я хотел бы обоих'levelname' и 'message' остаются неформатированными для обработки каркасом ведения журнала.

Как я вижу, есть два других способа решения проблемы:

  1. format = '[num-' + str(num) + '] %(levelname)s %(message)s' % (num,)
  2. format = '[num-%(num)d] %(levelname)s %(message)s' % dict(num=num, levelname='%(levelname)s', message='%(message)s')

Однако я нахожу оба решения несколько уродливыми, и я считаю, что должен быть лучший способ отформатировать только часть строки- либо в Python, либо с использованием встроенной в Python среды ведения логов.

Есть идеи?

1 Ответ

5 голосов
/ 24 августа 2011

Попробуйте это:

formatter = logging.Formatter('[num-%d] %%(levelname)s %%(message)s' % (num,))

Вы должны присвоить методу Formatter свою строку с полями %(...)s.%% будет интерпретироваться как % и поэтому может использоваться.

...