打开nginx调试

目录

第一步:编译时启用调试

使用 --with-debug 选项重新编译 nginx:

sudo ./configure --with-debug
sudo make
sudo make install

注意--with-debug 选项必须在编译时指定,后续的讨论都基于此选项启用。

第二步:配置文件中设置日志级别

nginx.confhttp {} 块中配置 error_log:

error_log logs/error.log debug;

debug 级别会记录所有信息。在源代码文件 ngx_log.c 的函数 ngx_set_error_log_levels() 末尾代码可以看到,如果设置为 debug 级别,程序会自动扩展为 NGX_LOG_DEBUG_ALL 以记录所有打印信息。

第三步:使用二级日志选项精细化控制

如果 debug 级别输出过多信息不利于定位问题,可以使用二级选项限制输出范围:

error_log logs/error.log notice;
error_log logs/error.log debug_http;

此例仅记录与 HTTP 相关的调试信息。

日志级别规则

日志级别分为两个层次:

第一级别(互斥):取其一即可

  • stderr、emerg、alert、crit、error、warn、notice、info、debug

第二级别(多选,仅在第一级别为 debug 时有效):

  • debug_core、debug_alloc、debug_mutex、debug_event、debug_http、debug_mail

示例:

# 正确:第一级为 debug,可指定多个第二级选项
error_log logs/error.log debug_http;
error_log logs/error.log debug_core;

# 错误:非 debug 级别下指定第二级选项会导致启动失败
error_log logs/error.log notice;
error_log logs/error.log debug_http;  # 这会报错

如果同时指定多条第一级别的配置,nginx 启动会报错提示日志级别重复。

注意:stderr 无法被配置为第一级别,一些早期版本中 emerg 可能是级别最低的。

#nginx