无法使用dictConfig配置过滤器

时间:2019-01-29 18:18:16

标签: python python-2.7 python-logging

我在使用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过滤器根据https://docs.python.org/2/howto/logging-cookbook.html#filters-contextualrecord.request_id添加到日志记录中

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 个答案:

没有答案