我在使用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-contextual将record.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'
,然后错误消失并且过滤器运行,但是格式字符串被忽略。
我想念什么?