Отладочный лог
Отладочный лог для определённых клиентов Запись в кольцевой буфер в памяти |
Для работы отладочного лога nginx должен быть сконфигурирован с поддержкой отладки на этапе сборки:
./configure --with-debug ...
Затем нужно задать уровень debug
с помощью
директивы error_log:
error_log /path/to/log debug;
Чтобы убедиться, что поддержка отладки сконфигурирована,
необходимо выполнить команду nginx -V
:
configure arguments: --with-debug ...
Готовые пакеты для Linux
по умолчанию предоставляют поддержку отладочного лога
при помощи бинарного файла nginx-debug
(1.9.8),
который можно запустить при помощи команд
service nginx stop service nginx-debug start
и затем задать уровень debug
.
Бинарная версия nginx для Windows всегда собирается с поддержкой отладочного
лога, поэтому понадобится лишь задать уровень debug
.
Обратите внимание, что переопределение лога без одновременного указания
уровня debug
отключит отладочный лог.
В примере ниже, переопределение лога на уровне
server
отключает отладочный лог для этого сервера:
error_log /path/to/log debug; http { server { error_log /path/to/log; ...
Чтобы избежать этого, следует либо закомментировать строку, переопределяющую
лог, либо добавить определение уровня debug
:
error_log /path/to/log debug; http { server { error_log /path/to/log debug; ...
Отладочный лог для определённых клиентов
Можно включить отладочный лог только для определённых клиентских адресов:
error_log /path/to/log; events { debug_connection 192.168.1.1; debug_connection 192.168.10.0/24; }
Запись в кольцевой буфер в памяти
Отладочный лог можно записывать в кольцевой буфер в памяти:
error_log memory:32m debug;
Запись в буфер в памяти на уровне debug
не оказывает существенного влияния на производительность
даже при высоких нагрузках.
В этом случае лог может быть извлечён при помощи
gdb
-скрипта, подобного следующему:
set $log = ngx_cycle->log while $log->writer != ngx_log_memory_writer set $log = $log->next end set $buf = (ngx_log_memory_buf_t *) $log->wdata dump binary memory debug_log.txt $buf->start $buf->end
Или при помощи такого lldb
-скрипта:
expr ngx_log_t *$log = ngx_cycle->log expr while ($log->writer != ngx_log_memory_writer) { $log = $log->next; } expr ngx_log_memory_buf_t *$buf = (ngx_log_memory_buf_t *) $log->wdata memory read --force --outfile debug_log.txt --binary $buf->start $buf->end