要启用调试日志,在nginx生成期间需要配置以支持调试:
./configure --with-debug ...
然后,应该使用 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
然后设置调试级别。
Windows 的 nginx 二进制版本总是带有调试日志支持的,所以只设置调试级别就足够了。注意,在不指定 debug 级别的情况下重新定义日志将禁用调试日志。
在下面的示例中,重新定义 server 级别的日志将禁用此服务器的调试日志:
# 全局定义日志 error_log /path/to/log debug; http { server { # 重新定义日志 error_log /path/to/log; ...
为了避免这种情况,应该注释掉重新定义日志的行,或者添加 debug 级别规范:
# 定义全局日志 error_log /path/to/log debug; http { server { # 重新定义日志,且设置为 debug 级别 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