Не могу настроить фильтры с помощью 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'
, затем ошибка исчезает и фильтр запускается, но строки формата игнорируются.
Что мне не хватает?