/ / Достъп до контекста за заявка в Python колбата за писане в Apache грешка - python, mod-wsgi

Достъп до контекста за заявка на Python колбата за писане в регистър за грешки в Apache - python, mod-wsgi

WSGI предава контекста на заявката си във флаш. Как да получа достъп до него?

Например, за да пиша в регистъра на грешките в уеб сървъра от приложението Flask, което не използва WSGI, пиша на stderr:

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

За този тип изходен запис, WSGI за Python изисква да използвам контекста на заявката WSGI environ["wsgi.errors"] Вижте документите за отстраняване на грешки в WSGI.

Как да направя това?

Отговори:

1 за отговор № 1

Ако използвате mod_wsgi, можете просто да го използвате print(), Той ще го залови и ще го изпрати на грешката в Apacheтрупи. Ако използвате достатъчно нова версия mod_wsgi и това се прави вътре в контекста на заявката, то дори ще бъде свързано с регистрирането на ниво Apache на заявката, което означава, че можете да я маркирате в дневниците на Apache, като зададете формат на лог на Apache , с Apache искане ID, ако е необходимо, така че може да го свърже с всяко Apache дърводобив за същата заявка.

Като цяло всички сървъри на WSGI ще улавят print() извежда и го изпраща в дневниците. Единствените изключения обикновено са за WSGI над CGI / FASTCGI / SCGI. Така че използването на wsgi.errors не е изрично необходима и всъщност е рядкост да се използва код дори.


0 за отговор № 2

Достъп до контекста на заявката за WSGI чрез request.environ

Влизане в регистъра на грешките в уеб сървъра за конфигурации WSGI и 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")