2012-11-04 8 views
6

Ich habe versucht, dies funktioniert seit langer Zeit, aber ich bin wirklich am Ende meines Wissens jetzt. Ich habe versucht, alles zu tun, was ich auf der SO- und Flaschendokumentation finden konnte, und dennoch kann ich kein einfaches Fehlerprotokoll erstellen, so dass ich meine Anwendung debuggen kann. Unten ist der eingefügte Code -Logging Flasher Fehler mit mod_wsgi

# main.py 
from flask import Flask 
import logging 

app = Flask(__name__) 
file_handler = logging.FileHandler(filename='/tmp/election_error.log') 
file_handler.setLevel(logging.WARNING) 
app.logger.addHandler(file_handler) 

@app.route('/') 
def hello(): 
    return "hello 
    #missing quotes to generate error 

if __name__ == "__main__": 
    app.run() 


#wsgi file 
import sys 
import logging 
sys.path.insert(0, "/var/www/voting_app") 
logging.basicConfig(stream=sys.stderr) 
from main import app as application 


# apache2 conf file 
WSGIDaemonProcess voting_app threads=5 
WSGIScriptAlias /election /var/www/voting_app/voting_app.wsgi 

LogLevel info 

<Directory /var/www/voting_app> 
     WSGIProcessGroup voting_app 
     WSGIApplicationGroup %{GLOBAL} 
     Order deny,allow 
     Allow from all 
</Directory> 

Bitte sagen Sie mir, wo ich falsch liege. Ich danke dir sehr.

Antwort

3

Sie müssen eine Laufzeit Ausnahme generieren, keine Kompilierungszeit Ausnahme. Ein fehlendes Zitat ist eine Ausnahme für die Kompilierungszeit und Ihr Protokollierungscode wird niemals ausgeführt.

erhöhen Nur eine Ausnahme statt:

@app.route('/') 
def hello(): 
    raise Exception('Deliberate exception raised') 
+0

Das funktioniert! Aber was ist mit anderen Fehlern? Dies ist ein Dummy main.py, das ich erstellt habe. I eine, die ich habe, gibt eine 500 Fehler, aber die Protokolldatei sieht leer aus? Was kann ich tun, um alle Arten von Fehlern zu erfassen, wie sie auf dem Entwicklungsserver angezeigt werden? Danke – Prakhar

+0

@Prakhar: Sie können * die meisten * Ausnahmen erfassen. Einfach nicht Syntaxfehler, testen Sie Ihren Code vor der Bereitstellung, um diese zu erfassen. –

+0

Wenn in der Produktion immer noch ein 500-Fehler angezeigt wird, wird Ihr Flaschencode nicht ausgeführt. das könnte ein Konfigurationsfehler oder ein Syntaxfehler sein, und Sie können solche nicht fangen. Überprüfen Sie die Protokolle Ihres WSGI-Servers. –

5

Der spezifische Fehler, den Sie erstellt, die ein Syntaxfehler war, würde Ausfall der WSGI Skriptdatei verursacht haben, um auch in mod_wsgi zu laden. Der Fehler hierfür wäre in der Apache-Fehlerprotokolldatei gelandet, nicht die Protokolldatei, die Sie mit dem Protokollierungsmodul eingerichtet haben. Haben Sie in der Apache-Fehlerprotokolldatei nachgesehen?

Für eine Ausnahme, die während der Ausführung der Anfrage ausgelöst wird, würde Flask standardmäßig eine 500-Fehler-Seite machen und ansonsten die Anzeige der Details unterdrücken. Sie müssen Flask einzurichten, um solche Laufzeitausnahmen auf andere Weise per E-Mail oder log:

http://flask.pocoo.org/docs/errorhandling/

Wenn Sie eine Laufzeitausnahme zurück zum Zwecke der Entwicklung an den Browser in der 500-Seite angezeigt werden soll, müssen Sie um den Flask-Debug-Modus zu aktivieren. Dies wird dadurch erreicht app.debug getan um wahr zu sein:

http://flask.pocoo.org/docs/config/?highlight=app%20debug

Sie sollten nicht Debug-Modus haben auf einen Benutzer aktiviert Produktionssystem gegenüber.