2017-05-28 8 views
0

WSGI übergibt seinen Anforderungskontext an Flask. Wie kann ich darauf zugreifen?Zugriff auf den Python-Flaschenanforderungskontext zum Schreiben in das Apache-Fehlerprotokoll

Eg, auf den Webserver Fehlerprotokoll von Flask app zu schreiben, die nicht WSGI verwendet wird, schreibe ich stderr:

sys.stderr.write(str(msg) + "\n") 

Für diese Art von Protokollausgabe, WSGI für Python erfordert, dass ich die Verwendung WSGI-Anfragekontext environ['wsgi.errors']See the WSGI debugging docs.

Wie mache ich das?

Antwort

0

Zugang der WSGI Anforderungskontext über request.environ

Protokollierung in die Log-Webserver Fehler für beide WSGI und nicht-WSGI configs:

def log(msg): 
    out_stream = sys.stderr 
    # See http://modwsgi.readthedocs.io/en/develop/user-guides/debugging-techniques.html 
    if 'wsgi.errors' in request.environ: out_stream = request.environ['wsgi.errors'] 
    out_stream.write(str(msg) + "\n") 
1

Bei der Verwendung von mod_wsgi Sie nur print() verwenden können. Es erfasst und sendet es an die Apache-Fehlerprotokolle. Wenn Sie eine neue mod_wsgi-Version verwenden, die innerhalb des Kontextes einer Anfrage ausgeführt wird, wird sie sogar mit der Anmeldung auf Apache-Ebene für die Anfrage verknüpft, dh Sie können sie in Apache-Logs durch Setzen des Apache-Log-Formats taggen , mit Apache-Anforderungs-ID bei Bedarf, so kann es mit jeder Apache-Protokollierung für dieselbe Anfrage assoziieren.

Im Allgemeinen erfassen alle WSGI-Server die Ausgabe print() und senden sie an die Protokolle. Die einzigen Ausnahmen sind für WSGI über CGI/FASTCGI/SCGI. Daher ist die Verwendung von wsgi.errors nicht unbedingt erforderlich, und es ist tatsächlich selten, dass Code sie sogar verwendet.

+0

Danke Graham! Möglicherweise möchten Sie die WSGI-Debugging-Dokumentation aktualisieren: http://modwsgi.readthedocs.io/en/develop/user-guides/debugging-techniques.html#apache-error-log-files –

Verwandte Themen