调试日志

选定客户端
的调试日志记录到循环内存缓冲区

要启用调试日志,需要将 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 二进制版本始终使用调试日志构建 支持,因此只需设置级别就足够了。debugdebug

请注意,在不指定级别的情况下重新定义日志将禁用调试日志。 在下面的示例中,在服务器级别重新定义日志将禁用此服务器的调试日志: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;

记录到级别上的内存缓冲区 即使在高负载下也不会对性能产生重大影响。 在这种情况下,可以使用 类似于以下脚本的脚本:debuggdb

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