Einfache Anwendungsprotokollierung / Debugging mit Nginx, UWSGI, FLASCHE?

Ich möchte das nicht einschaltengefährliche Debug-KonsoleMeine Anwendung wird jedoch mit einem Fehler von 500 angezeigt und scheint keine Ausgabe zu schreiben, die ich genauer untersuchen könnte.

ich sahdieser Austausch auf der Mailingliste, was mich führteauf dieser Seite zu Protokollierungsfehlern.

Trotzdem finde ich das sehr verwirrend und habe ein paar Fragen:

(1) In welcher Datei soll das unten stehende Zeug abgelegt werden?

ADMINS = ['[email protected]']
if not app.debug:
    import logging
    from logging.handlers import SMTPHandler
    mail_handler = SMTPHandler('127.0.0.1',
                               '[email protected]',
                               ADMINS, 'YourApplication Failed')
    mail_handler.setLevel(logging.ERROR)
    app.logger.addHandler(mail_handler)

... das "größer werden" -Dateimuster für größere Anwendungen vorausgesetzt?__init__.py? config.py? run.py?

(2) Ich bin überwältigt von Optionen und kann nicht sagen, welche ich verwenden soll. Welche Logger sollte ich mit welchen Einstellungen aktivieren, um das lokale Python-Server-Debug zu replizieren, wenn ich run.py ausführe? Ich finde diesen standardmäßigen lokalen Ausgabestream sehr nützlich, mehr als den interaktiven Debugger auf der Seite. Hat jemand ein Muster, das er beim Einrichten einer Replikation mit einer Nginx-Bereitstellung, die in einem Protokoll ausgegeben wird, teilen könnte?

(3) Muss ich irgendetwas ändern, nicht auf der Ebene der Flasche, sondern in Nginx, sagen wir in meinem/etc/nginx/sites-available/appname Datei, um die Protokollierung zu aktivieren?

AKTUALISIEREN

Insbesondere suche ich nach Informationen, die ich bekomme, wenn Python lokal ausgeführt wird, z. B. warum ein Paket nicht funktioniert oder wo mein Syntaxfehler sein könnte oder welche Variable nicht vorhanden ist:

$ python run.py 
Traceback (most recent call last):
  File "run.py", line 1, in <module>
    from myappname import app
  File "/home/me/myappname/myappname/__init__.py", line 27, in <module>
    file_handler.setLevel(logging.debug)
  File "/usr/lib/python2.7/logging/__init__.py", line 710, in setLevel
    self.level = _checkLevel(level)
  File "/usr/lib/python2.7/logging/__init__.py", line 190, in _checkLevel
    raise TypeError("Level not an integer or a valid string: %r" % level)

Wenn ich flask auf einem Server laufen lasse, sehe ich das nie. Ich erhalte gerade einen uWSGI-Fehler im Browser und habe keine Ahnung, welcher Code problematisch war. Ich möchte nur, dass so etwas in eine Datei geschrieben wird.

Ich bemerke auch, dass das Einstellen der folgenden Protokollierung nicht wirklich viel in die Datei geschrieben hat, selbst wenn ich das Protokoll auf die DEBUG-Ebene hochstelle:

from logging import FileHandler
file_handler = FileHandler('mylog.log')
file_handler.setLevel(logging.DEBUG)
app.logger.addHandler(file_handler)

mylog.log ist leer, auch wenn meine Bewerbung fehlerfrei ausgeht.

Ich werde auch hinzufügen, dass ich versucht habe, debug = True auf folgende Arten zu setzen, in__init__.py:

app = Flask(__name__)
app.debug = True
app.config['DEBUG'] = True
from werkzeug.debug import DebuggedApplication
app.wsgi_app = DebuggedApplication(app.wsgi_app, True)
app.config.from_object('config')
app.config.update(DEBUG=True)
app.config['DEBUG'] = True
if __name__ == '__main__':
    app.run(debug=True)

Während in meiner config.py-Datei habe ich ...

debug = True
Debug = True
DEBUG = True

Es findet jedoch kein Debugging statt, und ohne Protokollierung oder Debugging ist dies ziemlich schwer zu ermitteln. Fehler beenden die Anwendung einfach mit der nicht nützlichen Browsermeldung:

uWSGI Error
Python application not found

Antworten auf die Frage(3)

Ihre Antwort auf die Frage