Flask应用程序追踪不会显示在服务器日志中

我用uWSGI和nginx运行我的Flask应用程序。 有500错误,但追溯不会出现在浏览器或日志中。 如何从Flasklogging回溯?

uwsgi --http-socket 127.0.0.1:9000 --wsgi-file /var/webapps/magicws/service.py --module service:app --uid www-data --gid www-data --logto /var/log/magicws/magicapp.log 

uWSGI日志只显示500状态码,而不是回溯。 在nginx日志中也没有任何东西。

 [pid: 18343|app: 0|req: 1/1] 127.0.0.1 () {34 vars in 642 bytes} [Tue Sep 22 15:50:52 2015] GET /getinfo?color=White => generated 291 bytes in 64 msecs (HTTP/1.0 500) 2 headers in 84 bytes (1 switches on core 0) 

    在调用模式下运行,在app.run被调用之前添加这一行

     app.debug = True 

    或者通过运行

     app.run(debug=True) 

    现在堆栈跟踪应该出现在终端和浏览器中,而不是通用的500错误页面。

    使用new flask命令运行服务器时,请设置环境变量FLASK_DEBUG

     FLASK_DEBUG=1 flask run 

    在生产中,您不想在调试模式下运行您的应用程序。 相反,您应该将错误记录到文件中。

    Flask使用标准的Python日志记录库,可以配置为记录错误。 插入以下内容以将Flask的日志消息发送到文件。

     import logging handler = logging.FileHandler('/path/to/app.log') # errors logged to this file handler.setLevel(logging.ERROR) # only log errors and above app.logger.addHandler(handler) # attach the handler to the app's logger 

    阅读更多关于Python 日志模块。 特别是您可能想要将文件处理程序切换到RotatingFileHandler以确保日志文件不会变得太大。 您可能还想要更改记录级别以记录更多的错误。

    Flask还有关于如何登录您的应用程序的说明。

    由于代码中的OP答案设置调试标志可能会暂时解决问题,但是试图保持代码像从环境中读取调试变量一样。您可以利用这样的项目。

     from envparse import env app.debug = env('DEBUG', cast=bool) 

    通过这种方式,您可以轻松地从环境切换调试模式。 然后使用进程管理器设置来设置环境变量。

    Upstart (默认在Ubuntu 14.04)

     # /etc/init/uwsgiapp.conf env DEBUG=true script // upstart exec section end script 

    Systemd (默认在Ubuntu 16.04,Arch)

     [Service] Environment="DEBUG=true" # other parts 

    如果你正在使用内置的进程管理机制,那么你可以找到日志/ var / log部分

    Supervisord

     [program:flask] environment=DEBUG=true