El rastreo de la aplicación del matraz no se muestra en el registro del servidor

Estoy ejecutando mi aplicación Flask con uWSGI y nginx. Hay un error 500, pero el rastreo no aparece en el navegador ni en los registros. ¿Cómo registro el rastreo de 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 

El registro uWSGI solo muestra el código de estado 500, no el rastreo. Tampoco hay nada en el registro de 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) 

Ejecute en modo de desarrollo configurando la variable de entorno FLASK_ENV para development . Los errores no manejados mostrarán un seguimiento de la stack en el terminal y el navegador en lugar de una página genérica de error 500.

 export FLASK_ENV=development # use `set` on Windows flask run 

Antes de Flask 1.0, use FLASK_DEBUG=1 lugar.

Si aún está utilizando app.run (ya no se recomienda en Flask 0.11), pase debug=True .

 if __name__ == '__main__': app.run(debug=True) 

En producción, no desea ejecutar su aplicación en modo de depuración. En su lugar, debe registrar los errores en un archivo.

Flask utiliza la biblioteca estándar de registro de Python que se puede configurar para registrar errores. Inserte lo siguiente para enviar los mensajes de registro de Flask a un archivo.

 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 

Lea más sobre el módulo de registro de Python. En particular, es posible que desee cambiar dónde se registran los errores, o cambiar el nivel para registrar más que solo errores.

Flask tiene documentación para configurar el registro y el manejo de errores .

Puede configurar la variable de entorno FLASK_DEBUG=1 al ejecutar la aplicación como un servicio. Solo haga esto temporalmente, y tenga en cuenta que habilitar el modo de depuración en un servidor de producción es un problema de seguridad.

Upstart (por defecto en Ubuntu 14.04)

 # /etc/init/uwsgiapp.conf env FLASK_DEBUG=1 script // upstart exec section end script 

Systemd (por defecto en Ubuntu 16.04, Arch)

 [Service] Environment="FLASK_DEBUG=1" # other parts 

Supervisor

 [program:flask] environment=FLASK_DEBUG=1 

Normalmente, los registros estarán en algún lugar de /var/log/ .

Debe verificar el permiso de usuario y grupo en su código. Puedes verlo usando el comando “top”.

Puedes usar la extensión Flask-Debug como alternativa. Por supuesto, esto nunca debe estar habilitado en la producción.

 from flask import Flask from flask_debug import Debug app = Flask(__name__) Debug(app) app.run(debug=True) 

Luego, vaya a http: // localhost: 5000 / _debug para obtener una vista previa de los registros.

flask-appconfig> = 0.10 admite la inicialización automática de Flask-Debug durante el desarrollo, lo que le permite omitirlo completamente de su propio código (y, por lo tanto, implementaciones de producción).