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) 

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

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

 FLASK_DEBUG=1 flask run 

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

Flask使用标准的Python日志logging库可以configuration为logging错误。 插入以下内容以将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以确保日志文件不会变得太大。 您可能还想要更改logging级别以logging更多的错误。

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

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

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

通过这种方式,您可以轻松地从环境切换debugging模式。 然后使用进程pipe理器设置来设置环境variables。

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 

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

Supervisord

 [program:flask] environment=DEBUG=true