调试日志
| 选定客户端 的调试日志记录到循环内存缓冲区 |
要启用调试日志,需要将 nginx 配置为支持 在构建过程中进行调试:
./configure --with-debug ...
然后debuglevel 应使用 error_log 指令进行设置:
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级别就足够了。
请注意,在不指定debuglevel 将禁用调试日志。
在下面的示例中,在服务器级别重新定义日志将禁用此服务器的调试日志:
error_log /path/to/log debug;
http {
server {
error_log /path/to/log;
...
为避免这种情况,重新定义日志的行应为
注释掉,或者debuglevel 规范应
还要添加:
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