除錯日誌
針對選定客戶端的除錯日誌 記錄到循環記憶體緩衝區 |
要啟用除錯日誌,nginx 需要在建置期間設定為支援除錯
./configure --with-debug ...
然後應該使用 error_log 指令設定 debug
層級
error_log /path/to/log debug;
要驗證 nginx 是否設定為支援除錯,請執行 nginx -V
命令
configure arguments: --with-debug ...
預先建置的 Linux 套件提供現成的除錯日誌支援,並使用 nginx-debug
二進制檔案 (1.9.8),可以使用命令執行
service nginx stop service nginx-debug start
然後設定 debug
層級。Windows 的 nginx 二進制版本始終建置為支援除錯日誌,因此只需設定 debug
層級即可。
請注意,重新定義日誌而不指定 debug
層級也會停用除錯日誌。在下面的範例中,在 伺服器 層級上重新定義日誌會停用此伺服器的除錯日誌
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