我正在使用由 Waitress 提供服务的 Python 和 Flask 来托管
POST
API。我从 C# 程序调用 API,该程序发布数据并获取字符串响应。至少 95% 的情况下,它工作正常,但有时 C# 程序会报告错误:
(500) Internal Server Error
.
没有对该错误及其发生原因的进一步描述。唯一的线索是它通常发生在集群中——当错误发生一次时,它可能会连续发生几次。无需任何干预,它就会恢复正常运行。
由于错误很少见,因此很难排除故障。关于如何调试或获取更多信息有什么想法吗?我可以从 C# 端或 Flask/Waitress 端进行错误处理吗?
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
您的 Flask 应用程序应该在异常发生时记录异常。除了梳理日志(应该集中存储在某个地方)之外,您还可以考虑像 Sentry.io 这样的东西,它很容易使用 Flask 应用程序进行设置。