2017-05-28 1 views
0

WSGI passe son contexte de requête dans Flask. Comment y accéder?Accéder au contexte de demande de flacon Python pour écrire dans le journal d'erreurs Apache

Par exemple, pour écrire à l'erreur webserver journal de l'application Flask qui n'utilise pas WSGI, je vous écris pour stderr:

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

Pour ce type de sortie de l'exploitation forestière, WSGI pour Python exige que j'utilise la Contexte de la requête WSGI environ['wsgi.errors']See the WSGI debugging docs.

Comment procéder?

Répondre

0

Accéder au contexte de demande WSGI via request.environ

Enregistrement dans le journal d'erreur de serveur Web pour les WSGI et configs non WSGI:

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

Si vous utilisez mod_wsgi vous pouvez simplement utiliser print(). Il va capturer et l'envoyer aux journaux d'erreurs Apache. Si vous utilisez une nouvelle version de mod_wsgi et que cela est fait dans le contexte d'une requête, il sera même associé à la journalisation au niveau Apache pour la requête, ce qui signifie que vous pouvez le marquer dans les logs Apache, en définissant le format Apache , avec l'identifiant de requête Apache si nécessaire, vous pouvez donc l'associer à n'importe quel enregistrement Apache pour la même requête.

En général, tous les serveurs WSGI capturent la sortie print() et l'envoient aux journaux. Les seules exceptions ont tendance à être pour WSGI sur CGI/FASTCGI/SCGI. Donc, l'utilisation de wsgi.errors n'est pas spécifiquement nécessaire et il est réellement rare que le code l'utilise.

+0

Merci Graham! Vous pouvez mettre à jour les documents de débogage WSGI: http://modwsgi.readthedocs.io/en/develop/user-guides/debugging-techniques.html#apache-error-log-files –