web-dev-qa-db-ger.com

Das Traceback der Flaschenanwendung wird nicht im Serverprotokoll angezeigt

Ich verwende meine Flask-Anwendung mit uWSGI und nginx. Es gibt einen Fehler 500, aber der Traceback erscheint nicht im Browser oder in den Protokollen. Wie protokolliere ich das Traceback von 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

Das uWSGI-Protokoll zeigt nur den 500-Statuscode, nicht den Traceback. Es gibt auch nichts im 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)
17
Phil Cote

Führen Sie im Entwicklungsmodus aus, indem Sie die Umgebungsvariable FLASK_ENV auf development setzen. Bei nicht behandelten Fehlern wird anstelle einer generischen 500-Fehlerseite eine Stapelablaufverfolgung im Terminal und im Browser angezeigt.

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

Verwenden Sie vor Flask 1.0 stattdessen FLASK_DEBUG=1.

Wenn Sie weiterhin app.run verwenden (nicht mehr in Flask 0.11 empfohlen), übergeben Sie debug=True.

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

In der Produktion möchten Sie Ihre App nicht im Debug-Modus ausführen. Stattdessen sollten Sie die Fehler in einer Datei protokollieren.

Flask verwendet die standardmäßige Python-Protokollierungsbibliothek, die zum Protokollieren von Fehlern konfiguriert werden kann. Fügen Sie Folgendes ein, um die Protokollnachrichten von Flask an eine Datei zu senden.

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

Lesen Sie mehr zum Python Logging Modul. Insbesondere möchten Sie möglicherweise ändern, wo Fehler protokolliert werden, oder die Ebene ändern, um mehr als nur Fehler aufzuzeichnen.

Die Flasche verfügt über Dokumentation für Konfigurieren von Protokollierungs und Verarbeitungsfehlern .

24
lv9

Sie können die Umgebungsvariable FLASK_DEBUG=1 festlegen, wenn Sie die App als Dienst ausführen. Führen Sie dies nur vorübergehend aus. Beachten Sie, dass die Aktivierung des Debug-Modus auf einem Produktionsserver ein Sicherheitsproblem darstellt.

Upstart (Standard in Ubuntu 14.04)

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

Systemd (Standard in Ubuntu 16.04, Arch) 

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

Supervisord

[program:flask]
environment=FLASK_DEBUG=1

Normalerweise befinden sich die Protokolle irgendwo in /var/log/.

1
I Am Batman

Alternativ können Sie die Erweiterung Flask-Debug verwenden. Natürlich sollte dies in der Produktion niemals aktiviert werden.

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

Wechseln Sie als Nächstes zu http: // localhost: 5000/_debug , um eine Vorschau der Protokolle anzuzeigen.

flask-appconfig> = 0.1 unterstützt die automatische Initialisierung von Flask-Debug während der Entwicklung, sodass Sie diesen Code vollständig aus Ihrem eigenen Code ausschließen können (und damit Produktionsbereitstellungen).

0
Gabriel H.

Sie müssen die Benutzer- und Gruppenberechtigungen in Ihrem Code überprüfen. Sie können es mit dem Befehl "top" anzeigen.

0
abhishek kumar