Вопрос: Как выводить переменную в журнал nginx для отладки


Я тестирую nginx и хочу выводить переменные в файлы журнала. Как я могу это сделать и какой файл журнала будет работать (доступ или ошибка).


59
2017-07-04 05:29


Источник




Ответы:


Вы можете отправлять значения переменной nginx через заголовки. Удобен для разработки.

add_header X-uri "$uri";

и вы увидите в заголовках ответов вашего браузера:

X-uri:/index.php

Я иногда делаю это во время местного развития.

Также полезно сообщить вам, выполняется ли подразделение или нет. Просто посыпайте его внутри своих статей, чтобы узнать, привыкают ли они.

location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt)$ {
    add_header X-debug-message "A static file was served" always;
    ...
}

location ~ \.php$ {
    add_header X-debug-message "A php file was used" always;
    ...
}

Поэтому посещение URL-адреса http://www.example.com/index.php вызовет последний заголовок во время посещения http://www.example.com/img/my-ducky.png будет запускать первый заголовок.


111
2018-03-08 19:58



Обратите внимание, что add_header будет работать только по успешным запросам, Документация заявляет, что она может применяться только к ответам с кодами 200, 204, 301, 302 или 304. Поэтому ее нельзя использовать для отладки ошибок HTTP. - John WH Smith
Ах, это гениально! Благодаря! - L0j1k
@JohnWHSmith: Как отметил марат в этот ответ, Начиная с версия 1.7.5, nginx добавил параметр «всегда» в add_header который вернет заголовок, независимо от того, какой код ответа. Так, например, add_header X-debug-message "A php file was used" always;, должен работать даже на 500 код ошибки. - yuvilio
Настоящий герой. Спас мою жизнь - Bernardo Vale
Это вообще не отвечает на вопрос. Парень хочет войти в журнальный файл а не клиенту. - Avamander


Вы можете вернуть простую строку в качестве ответа HTTP:

location /
{
    return 200 $document_root;
}

28
2018-02-21 17:39



Что делать, если вы хотите вернуть два значения переменных? - BringBackCommodore64
Переход к местоположению немедленно открывает диалог «Сохранить как» моего браузера (проверен на Opera, Chromium). Никакой реакции вообще. - BringBackCommodore64


Вы можете установить формат журнала пользовательского доступа, используя log_format которая регистрирует интересующие вас переменные.


15
2017-07-04 05:35



спасибо, и я думаю, что нет простого способа вывести одну переменную самостоятельно? - lulalala
@lulalala Не то, что я знаю. - mgorven
Можно задать уровень журнала в директиве error_log в debug поэтому вы можете увидеть значение переменных и того блока, который выполняется. пример error_log file.log debug - Victor Aguilar
заметим, что пустые переменные показаны как - в журнале, но они действительно пусты в коде nginx, вы не должны проверять - в любое время. Это иногда путают пользователей. - higuita


Другим вариантом является включение эхо-модуль когда вы создаете nginx или устанавливаете OpenResty который является nginx в комплекте с кучей расширений (например, echo.)

Затем вы можете просто погрузить свою конфигурацию с помощью таких утверждений, как:

echo "args: $args"

6
2017-11-21 22:30



Когда я пытаюсь это сделать, он выделяется на обычный текстовый файл на сервере, прерывая вывод фактической страницы. - JaredMcAteer
Есть echo_log директивы в разработке. - Gajus