Как исправить «KeyError: 'log_context'» на Flask - PullRequest
1 голос
/ 27 марта 2019

Я использую более старые версии для одного из моих серверов (из-за некоторых зависимостей).Я установил свой сервер в Docker-контейнере, и он работает до сегодняшнего дня.Когда я перестраиваю свой образ и перезапускаю сервис, он получает эту ошибку:

Exception on /messages [GET]
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1477, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1379, in handle_user_exception
    return handler(e)
  File "/opt/sync-engine/inbox/api/ns_api.py", line 226, in handle_input_error
    request.environ['log_context']['error'] = error.__class__.__name__
KeyError: 'log_context'
{"module": "inbox.api.srv:28", "level": "error", "event": "Uncaught error thrown by Flask/Werkzeug", "timestamp": "2019-03-27T10:36:55.760581Z", "greenlet_id": 140055343249040}

srv.py (inbox.api.srv):

...
def default_json_error(ex):
    """ Exception -> flask JSON responder """
    logger = get_logger()
    logger.error('Uncaught error thrown by Flask/Werkzeug', exc_info=ex)
    response = jsonify(message=str(ex), type='api_error')
    response.status_code = (ex.code
                            if isinstance(ex, HTTPException)
                            else 500)
    return response
...

ns_api.py:

...
@app.errorhandler(APIException)
def handle_input_error(error):
    # these "errors" are normal, so we don't need to save a traceback
    request.environ['log_context']['error'] = error.__class__.__name__
    request.environ['log_context']['error_message'] = error.message
    response = flask_jsonify(message=error.message,
                             type='invalid_request_error')
    response.status_code = error.status_code
    return response
...

1 Ответ

0 голосов
/ 27 марта 2019

Основная причина:

нет ключа log_context в request.environ

Чтобы исправить это, просто инициализируйте ключ log_context

request.environ.setdefault('log_context', dict())
# etc...
request.environ['log_context']['error'] = error.__class__.__name__

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...