首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

A debugging log

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

要启用调试日志,需要配置nginx以在构建期间支持调试:

代码语言:javascript
复制
./configure --with-debug ...

之后debug应该使用error_log指令设置关卡:

代码语言:javascript
复制
error_log /path/to/log debug;

要验证nginx是否配置为支持调试,请运行以下nginx -V命令:

代码语言:javascript
复制
configure arguments: --with-debug ...

预先构建的Linux软件包提供开箱即用的支持,以便nginx-debug使用可以使用命令运行的二进制文件(1.9.8)来调试日志

代码语言:javascript
复制
service nginx stop
service nginx-debug start

然后设置debug级别。Windows的nginx二进制版本始终是用调试日志支持构建的,因此只需设置该debug级别即可。

请注意,重新定义日志而不指定debug级别将禁用调试日志。在下面的示例中,重新定义服务器级别的日志会禁用此服务器的调试日志:

代码语言:javascript
复制
error_log /path/to/log debug;

http {
    server {
        error_log /path/to/log;
        ...

为了避免这种情况,重新定义日志的行应该被注释掉,或者应该添加debug级别标识:

代码语言:javascript
复制
error_log /path/to/log debug;

http {
    server {
        error_log /path/to/log debug;
        ...

调试所选客户端的日志

也可以仅为选定的客户端地址启用调试日志:

代码语言:javascript
复制
error_log /path/to/log;

events {
    debug_connection 192.168.1.1;
    debug_connection 192.168.10.0/24;
}

记录到循环内存缓冲区

调试日志可以写入循环内存缓冲区:

代码语言:javascript
复制
error_log memory:32m debug;

即使在高负载情况下,在调试级别上记录到内存缓冲区也不会对性能产生重大影响。 在这种情况下,可以使用gdb脚本来提取日志,如下所示:

代码语言:javascript
复制
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

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com