调试日志
选定客户端 的调试日志记录到循环内存缓冲区 |
要启用调试日志,需要将 nginx 配置为支持 在构建过程中进行调试:
./configure --with-debug ...
然后,应使用 error_log 指令设置级别:debug
error_log /path/to/log debug;
要验证 nginx 是否配置为支持调试,
运行命令:nginx -V
configure arguments: --with-debug ...
预构建的 Linux 软件包
为调试日志提供开箱即用的支持
二进制 (1.9.8)
可以使用命令运行nginx-debug
service nginx stop service nginx-debug start
,然后设置级别。
Windows 的 nginx 二进制版本始终使用调试日志构建
支持,因此只需设置级别就足够了。debug
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