Не могу настроить фильтры с помощью dictConfig

У меня проблемы с настройкой фильтров при входе в систему dictConfig, это словарь конфигурации я использую

{ 'disable_existing_loggers': False,
  'filters': { 'request': { '()': <class 'applogging.filters.RequestFilter'>}},
  'formatters': { 'full': { 'format': '[%(asctime)s %(levelname)-8s %(request_id)s] %(name)s[%(filename)s:%(module)s:%(funcName)s:%(lineno)d]: %(message)s'},
                  'medium': { 'format': '[%(asctime)s %(levelname)-8s %(request_id)s] %(name)s[%(module)s:%(lineno)d]: %(message)s'},
                  'short': { 'format': '[%(levelname)-8s] [%(request_id)s] TEST :%(name)s:%(lineno)d: %(message)s'}},
  'handlers': { 'default': { 'class': 'logging.StreamHandler',
                             'formatter': 'short',
                             'level': 'DEBUG'}},
  'loggers': { '': { 'filters': ['request'],
                     'handlers': ['default'],
                     'level': 'WARNING',
                     'propagate': True},
               'billing': { 'level': 'INFO'},
               'boto': { 'level': 'WARNING'},
               'boto3': { 'level': 'WARNING'},
               'botocore': { 'level': 'WARNING'},
               'shiphero.bulkship': { 'level': 'INFO'},
               'shiphero.core.product.uploader': { 'level': 'INFO'},
               'shiphero.inventory.uploader': { 'level': 'INFO'},
               'shiphero_app.core.inventory': { 'level': 'INFO'},
               'shiphero_app.core.order': { 'level': 'INFO'},
               'shiphero_app.core.rules.allocation': { 'level': 'DEBUG'},
               'shiphero_app.modules.queue_workers': { 'level': 'INFO'},
               'shiphero_app.modules.tasks': { 'level': 'INFO'},
               'shiphero_app.services.pending_shipments': { 'level': 'DEBUG'},
               'shiphero_app.services.returns': { 'level': 'INFO'},
               'shiphero_app.services.shipment': { 'level': 'DEBUG'}},
  'version': 1}

request фильтр добавляет record.request_id в записи журнала в соответствии с https://docs.python.org/2/howto/logging-cookbook.html

class RequestFilter(logging.Filter):
    def filter(self, record):
        if not request:
            return True

        record.url = request.url
        record.body = request.get_json()
        if 'request_id' not in g:
            g.request_id = uuid.uuid4()
        record.request_id = g.request_id
        return True

но фильтр не запускается, когда я пытаюсь что-то зарегистрировать, он говорит: KeyError: 'request_id'

Если я добавлю это в корень словаря конфигурации:

  'loggers': { '': { 'filters': ['request'],
               ....
  'root': {
      'filters': ['request'],
  }

или я использую 'root': { 'filters': ['request'].... внутри 'loggers', затем ошибка исчезает и фильтр запускается, но строки формата игнорируются.

Что мне не хватает?

0 ответов

Другие вопросы по тегам