Łatwe rejestrowanie / debugowanie aplikacji za pomocą nginx, uwsgi, flask?

Nie chcę włączaćniebezpieczna konsola do debugowania, ale moja aplikacja ma błąd 500 i wydaje się, że nie pisze żadnych danych wyjściowych, aby głębiej zbadać.

widziałemta wymiana na liście mailingowej, który mnie zaprowadziłna tej stronie o błędach rejestrowania.

Jednak nadal uważam to za bardzo mylące i mam kilka pytań:

(1) W którym pliku powinny znajdować się poniższe elementy?

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)

... zakładając, że wzorzec „coraz większy” dla większych aplikacji?__init__.py? config.py? run.py?

(2) Jestem przytłoczony dostępnymi opcjami i nie mogę powiedzieć, z czego powinienem skorzystać. Które rejestratory należy włączyć, z jakimi ustawieniami, aby zreplikować lokalny debugowanie serwera Pythona, dostaję się do stdout, gdy uruchamiam run.py? Uważam, że domyślny lokalny strumień wyjściowy jest bardzo przydatny, bardziej niż interaktywny debuger na stronie. Czy ktoś ma wzorzec, który mógłby udostępnić podczas konfigurowania czegoś, co powiela to za pomocą wdrożenia nginx, wyprowadzając do dziennika?

(3) Czy jest coś, co muszę zmienić, nie na poziomie kolby, ale w nginx, powiedz w moim/etc/nginx/sites-available/appname plik, aby włączyć rejestrowanie?

AKTUALIZACJA

W szczególności szukam informacji, takich jak otrzymuję, gdy python działa lokalnie, dlaczego, powiedzmy, pakiet nie działa lub gdzie może być mój błąd składniowy lub jaka zmienna nie istnieje:

$ 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)

Kiedy uruchamiam kolbę na serwerze, nigdy tego nie widzę. Po prostu dostaję błąd uWSGI w przeglądarce i nie mam pojęcia, który kod był problematyczny. Chciałbym po prostu napisać coś takiego do pliku.

Zauważyłem również, że ustawienie następującego rejestrowania tak naprawdę nie zapisywało zbyt wiele do pliku, nawet gdy włączę logowanie do poziomu DEBUG:

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

mylog.log jest pusta, nawet jeśli moja aplikacja się nie powiedzie.

Dodam również, że próbowałem ustawić debug = True w następujący sposób, w__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)

Będąc w moim pliku config.py, mam ...

debug = True
Debug = True
DEBUG = True

Jednak nie dochodzi do debugowania, a bez rejestrowania lub debugowania jest to raczej trudne do wyśledzenia. Błędy po prostu kończą aplikację za pomocą nieprzydatnej wiadomości przeglądarki:

uWSGI Error
Python application not found

questionAnswers(3)

yourAnswerToTheQuestion