调试日志
为选定客户端调试日志 记录到循环内存缓冲区 |
要启用调试日志,需要在构建期间将 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
级别将禁用调试日志。在下面的示例中,在 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