Python 创建简单的烧瓶错误应用程序以记录异常

Python 创建简单的烧瓶错误应用程序以记录异常,python,flask,logging,Python,Flask,Logging,我已经上传了一些代码到服务器上。代码在本地运行,但当我将其上载到服务器时,它会给我一个内部服务器错误。该网站正在使用wsgi运行,代码为: try: from decksite import main, APP as application except Exception as e: from shared import repo repo.create_issue('Error starting website', except

我已经上传了一些代码到服务器上。代码在本地运行,但当我将其上载到服务器时,它会给我一个内部服务器错误。该网站正在使用wsgi运行,代码为:

    try:
        from decksite import main, APP as application
    except Exception as e:
        from shared import repo
        repo.create_issue('Error starting website', exception=e)
    
    if __name__ == '__main__':
        print('Running manually.  Is something wrong?')
        application.run(host='0.0.0.0', debug=False)
因此,尝试和尝试都失败了。我想添加第二个异常,并将其全部传递给一个简单的flask应用程序,该应用程序将两个异常输出到浏览器并将它们记录到一个文件中。问题是,我不知道如何将异常传递给error_app flask app,它在我设置日志配置的行中中断。这就是我所做的。我只得到了NoneType:None,而不是完整的异常

import os, sys
sys.path.append("/home/myuser/public_html/flask");

try:
    from decksite import main, APP as application
except Exception as error:
    #from shared import repo
    #repo.create_issue('Error starting decksite', exception=error)

    #sys.path.insert(0, os.path.dirname(__file__))
    #from error_app import app as application

    # This is the code that goes into the error flask application
    import logging
    import traceback
    from flask import Flask, __version__
    app = Flask(__name__)
    application = app

    @app.route("/")
    def hello():
        return traceback.format_exc()
        # The next line gives Internal Server Error
        logging.basicConfig(filename='example.log', level=logging.DEBUG)
        logging.exception(error)
        return traceback.format_exc()


if __name__ == '__main__':
    print('Running manually.  Is something wrong?')
    application.run(host='0.0.0.0', debug=False)
我在服务器中没有sudo,也不能ssh到它,所以除非我能够记录错误,否则我将无法修复任何东西

编辑:我几乎得到了我想要的:


创建一个自定义500处理程序并打印出trackback

import traceback

@app.errorhandler(500)
def internal_server_error(e):
    return render_template('500_error.html', traceback=traceback.format_exc())

让您的“500_error.html”模板显示回溯信息。

您提到的500内部服务器错误即将出现。在您的本地服务器上一切正常,但在服务器上失败。由于您没有ssh访问权限,因此可能很难进行调试。如果您使用Docker或Kubernetes之类的工具来构建和部署,它可能会很有用。我可以向您推荐一些调试方法。代码不会尝试,除非失败了,可能的原因是服务器本身没有启动,因为缺少一些要求,比如导入,或者它可能是任何东西。 调试步骤

创建虚拟环境并在其中重新安装与服务器类似的要求。这将帮助您确定是否缺少需求。 如果您认为环境不是生产环境,并且您正在服务器中测试应用程序,则将debug=True。它将在前端显示一个错误。这绝对不是推荐的方法。我的建议是,因为您没有ssh访问权限。 如果可能的话,创建一个简单的路由,比如说/hello,然后返回hello,并检查它是否返回了正确的结果。这将让您知道服务器是否正在启动。即使这样,也不建议用于生产。 您还可以在请求前和请求后检查flask应用程序。这可能也很有用
希望第一步调试将对您有很大帮助,您可能不需要进入第2步和第3步。我给你的是最坏情况的场景,我认为我应该避免使用任何模板,以防模板目录所在的模块没有被导入。你可以使用或只是将其作为json返回。除了前面的错误,我还得到了,尝试使用ErrorDocument处理请求时遇到500内部服务器错误。您的生产环境似乎与您的开发/测试环境有很大不同。我会先设法解决这个问题。在这一过程中,这500个错误可能会变得明显。