Appearance
调试日志
提示
来自deepseek解释
原文链接:https://nginx.org/en/docs/debugging_log.html
要启用调试日志,nginx 需要在构建时配置支持调试功能:
bash
./configure --with-debug ...然后应通过 error_log 指令设置调试级别:
nginx
error_log /path/to/log debug;要验证 nginx 是否已配置支持调试,可运行 nginx -V 命令检查:
configure arguments: --with-debug ...预构建的 Linux 软件包提供了开箱即用的调试日志支持,附带 nginx-debug 二进制文件(1.9.8 版本起),可通过以下命令运行:
bash
service nginx stop
service nginx-debug start然后设置 debug 级别即可。
Windows 版本的 nginx 二进制文件始终内置调试日志支持,因此只需设置调试级别即可。
需要注意的是,重新定义日志时如果未同时指定 debug 级别,将会禁用调试日志。在下面的示例中,在 server 级别重新定义日志会禁用该服务器的调试日志:
nginx
error_log /path/to/log debug;
http {
server {
error_log /path/to/log;
...
}
}为避免此问题,要么注释掉重新定义日志的那一行,要么也加上 debug 级别指定:
nginx
error_log /path/to/log debug;
http {
server {
error_log /path/to/log debug;
...
}
}为指定客户端启用调试日志
也可以仅为指定的客户端地址启用调试日志:
nginx
error_log /path/to/log;
events {
debug_connection 192.168.1.1;
debug_connection 192.168.10.0/24;
}写入循环内存缓冲区
调试日志可以写入循环内存缓冲区:
nginx
error_log memory:32m debug;在 debug 级别下写入内存缓冲区,即使在高压负载下对性能的影响也不大。在这种情况下,可以使用类似下面的 gdb 脚本提取日志:
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 脚本:
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