Отладочный лог

Отладочный лог для определённых клиентов
Запись в кольцевой буфер в памяти

Чтобы включить отладочный лог, при сборке следует сконфигурировать nginx с поддержкой отладки:

./configure --with-debug ...

Затем нужно задать уровень debug с помощью директивы error_log:

error_log /path/to/log 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