Non sto cercando di accendere lo dangerous debugging console, ma la mia applicazione sta ricevendo un errore 500 e non sembra che stia scrivendo alcun risultato per me per indagare più a fondo.Facile registrazione/debug dell'applicazione con nginx, uwsgi, flask?
Ho visto this exchange on the mailing list, che mi ha portato a to this page on logging errors.
Tuttavia, ho ancora trovare questo molto confusa e hanno un paio di domande:
(1) In quale file deve la roba sotto andare?
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)
... assumendo il modello di file "sempre più grande" per le applicazioni più grandi? __init__.py
? config.py
? run.py
?
(2) Sono sopraffatto dalle opzioni lì, e non posso dire quale usare. Quali registratori devo attivare, con quali impostazioni, per replicare il debug del server python locale, arrivo allo stdout quando eseguo run.py? Trovo che il flusso di output predefinito sia molto utile, molto più del debugger interattivo nella pagina. Qualcuno ha uno schema da condividere su come impostare qualcosa che lo replica con una distribuzione di nginx, in uscita in un log?
(3) C'è qualcosa che ho bisogno di cambiare, non a livello di pallone, ma in nginx, ad esempio nel mio file /etc/nginx/sites-available/appname
, per abilitare la registrazione?
UPDATE
In particolare, sto cercando informazioni come ottengo quando viene eseguito python localmente sul motivo per cui, ad esempio, un pacchetto non funziona, o dove potrebbe essere il mio errore di sintassi, o quale variabile doesn' Esistono:
$ 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)
Quando eseguo il pallone su un server, non lo vedo mai. Ho appena ricevuto un errore uWSGI nel browser e non ho idea di quale codice fosse problematico. Vorrei solo qualcosa di simile a quanto sopra scritto in un file.
Ho notato anche che impostando la seguente registrazione in realtà non scrivere molto di file, anche quando accendo il registro strada fino al livello di debug:
from logging import FileHandler
file_handler = FileHandler('mylog.log')
file_handler.setLevel(logging.DEBUG)
app.logger.addHandler(file_handler)
mylog.log
è vuoto, anche quando il mio errori di applicazione su.
Sarò anche aggiungere che ho cercato di impostare il debug = True nei seguenti modi, 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)
Mentre nel mio file config.py, ho ...
debug = True
Debug = True
DEBUG = True
Tuttavia, non si verifica alcun debug e senza registrazione o debug, è piuttosto difficile rintracciare. Errori semplicemente terminare l'applicazione con il messaggio del browser non-utile:
uWSGI Error
Python application not found
Ho aggiornato la mia risposta in base alla domanda aggiornata. –
Hai mai risolto questo problema? – hafichuk
Non l'ho fatto. Impossibile ottenere una macchina di produzione ospitata, abbandonata sul pallone. – Mittenchops