web-dev-qa-db-fra.com

La trace de l'application du flacon ne s'affiche pas dans le journal du serveur

J'exécute mon application Flask avec uWSGI et nginx. Il y a une erreur 500, mais le suivi n'apparaît pas dans le navigateur ni dans les journaux. Comment enregistrer la traceback 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

Le journal uWSGI affiche uniquement le code d’état 500, pas le suivi. Il n'y a également rien dans le journal 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)
17
Phil Cote

Exécutez-le en mode développement en définissant la variable d'environnement FLASK_ENV sur development. Les erreurs non gérées afficheront une trace de pile dans le terminal et le navigateur au lieu d'une page d'erreur générique 500.

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

Avant Flask 1.0, utilisez plutôt FLASK_DEBUG=1.

Si vous utilisez toujours app.run (n'est plus recommandé dans le flacon 0.11), transmettez debug=True.

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

En production, vous ne voulez pas exécuter votre application en mode débogage. Au lieu de cela, vous devriez enregistrer les erreurs dans un fichier.

Flask utilise la bibliothèque de journalisation Python standard pouvant être configurée pour consigner les erreurs. Insérez les éléments suivants pour envoyer les messages de journal de Flask dans un fichier.

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

En savoir plus sur le module logging de Python. En particulier, vous souhaiterez peut-être modifier l'emplacement où les erreurs sont consignées ou modifier le niveau pour enregistrer davantage que de simples erreurs.

Flask dispose de documentation pour configuration de la journalisation et erreurs de traitement .

24
lv9

Vous pouvez définir la variable d'environnement FLASK_DEBUG=1 lors de l'exécution de l'application en tant que service. Ne le faites que temporairement et notez que l'activation du mode débogage sur un serveur de production est un problème de sécurité.

Upstart (par défaut dans Ubuntu 14.04)

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

Systemd (par défaut dans Ubuntu 16.04, Arch) 

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

Superviseur

[program:flask]
environment=FLASK_DEBUG=1

En règle générale, les journaux seront quelque part dans /var/log/.

1
I Am Batman