Обрабатывать различный набор дополнительных аргументов при форматировании регистрации вызовов. - PullRequest
0 голосов
/ 24 апреля 2020

Я хочу, чтобы вызывающие мои регистраторы передавали любую (или нет) коллекцию «дополнительных» значений моему регистратору и желали форматировать их согласованным образом.

Чтобы использовать обычные строки форматирования модуля логирования, мне, кажется, нужно знать, какие пары ключей и значений будут включены в словарь extra заранее. Мой главный вопрос заключается в том, как обрабатывать разные наборы дополнительных ключей, пар значений для разных вызывающих абонентов.

Например, следующие вызовы регистратора:

import logging
logger = logging.getLogger(__name__)
logger.warn("Test Message 1", extra={"state_id": 1, "country_id": 2, "city_id": 3})
logger.warn("Test Message 2", extra={"city_id": 3, "state_id": 1})
logger.warn("Test Message 3")

Я хочу выйти как:

"ПРЕДУПРЕЖДЕНИЕ: тестовое сообщение 1 {city_id: 3, country_id: 2, state_id: 1}"

"ПРЕДУПРЕЖДЕНИЕ: тестовое сообщение 2 {city_id: 3, state_id: 1}"

«ПРЕДУПРЕЖДЕНИЕ: тестовое сообщение 3»

Также у меня есть несколько технических ограничений:

  1. За исключением «стандартного» вывода текста, я также экспортирую записи журнала как json -logs, в которые включены разные идентификаторы, а поле сообщения должно содержать только исходное сообщение. Поэтому я не могу просто добавить эти значения к самому сообщению.
  2. Я не контролирую код клиента, поэтому не могу изменить способ вызова регистратора.
  3. Поскольку у меня могут быть разные регистраторы, которые совместно используют тот же форматер / обработчик Я бы предпочел какое-то решение на уровне форматера / обработчика, которое будет работать для всех различных регистраторов.
...