I'm running my Flask application with uWSGI and nginx. There's a 500 error, but the traceback doesn't appear in the browser or the logs. How do I log the traceback from Flask?
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
The uWSGI log only shows the 500 status code, not the traceback. There's also nothing in the nginx log.
[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)
Run in development mode by setting the
FLASK_ENV
environment variable todevelopment
. Unhandled errors will show a stack trace in the terminal and the browser instead of a generic 500 error page.Prior to Flask 1.0, use
FLASK_DEBUG=1
instead.If you're still using
app.run
(no longer recommended in Flask 0.11), passdebug=True
.In production, you don't want to run your app in debug mode. Instead you should log the errors to a file.
Flask uses the standard Python logging library can be configured to log errors. Insert the the following to have send Flask's log messages to a file.
Read more about the Python logging module. In particular you may want to change where errors are logged, or change the level to record more than just errors.
Flask has documentation for configuring logging and handling errors.
You can set the
FLASK_DEBUG=1
environment variable when running the app as a service. Only do this temporarily, and note that enabling debug mode on a production server is a security issue.Upstart (default in Ubuntu 14.04)
Systemd (default in Ubuntu 16.04, Arch)
Supervisord
Typically the logs will be somewhere in
/var/log/
.