Как отладить (500) внутреннюю ошибку сервера на сервере Python Waitress? - PullRequest
1 голос
/ 22 сентября 2019

Я использую Python и Flask, обслуживаемые Waitress, для размещения POST API.Я вызываю API из программы на C #, которая публикует данные и получает строковый ответ.По крайней мере, в 95% случаев она работает нормально, но иногда программа на C # сообщает об ошибке: (500) Internal Server Error.

Нет дальнейшего описания ошибки или причины ее возникновения.Единственная подсказка состоит в том, что это обычно происходит в кластерах - когда ошибка возникает один раз, она, вероятно, происходит несколько раз подряд.Без какого-либо вмешательства он затем возвращается к нормальной работе.

Поскольку ошибка настолько редкая, ее трудно устранить.Любые идеи относительно того, как отладить или получить больше информации?Есть ли обработка ошибок, которую я могу сделать со стороны C # или со стороны Flask / Waitress?

Ответы [ 2 ]

0 голосов
/ 22 сентября 2019

Flask поддерживает регистрации обработчиков ошибок .Определение обработчиков ошибок позволяет настраивать журналы ошибок сервера, а также возвращать клиенту более значимую информацию.

Пример

import logging
import traceback

from flask import Flask, jsonify
from werkzeug.exceptions import HTTPException


app = Flask(__name__)
logger = logging.getLogger()

@app.errorhandler(HTTPException)
def handle_http_exception(error):
    error_dict = {
        'code': error.code,
        'description': error.description,
        'stack_trace': traceback.format_exc() 
    }
    log_msg = f"HTTPException {error_dict.code}, Description: {error_dict.description}, Stack trace: {error_dict.stack_trace}"
    logger.log(msg=log_msg)
    response = jsonify(error_dict)
    response.status_code = error.code
    return response
0 голосов
/ 22 сентября 2019

Ваше приложение фляги должно регистрировать исключение, когда это происходит.Помимо прочесывания логов (которые должны храниться где-то централизованно), вы можете рассмотреть что-то вроде Sentry.io, который довольно легко настроить с помощью приложений Flask.

...