Nginx错误日志级别从emerg到debug由高到低,debug最详细但需--with-debug编译、error_log显式配置debug级并重载生效;生产用warn/error,调试时应限定IP或作用域避免日志爆炸;access_log与error_log分工明确,不可替代。

nginx.conf 中的日志等级直接控制错误日志的详细程度,而调试信息输出不仅依赖日志级别,还受编译选项和具体配置共同影响。生产环境通常禁用 debug 级别,但排查 rewrite、SSL 或模块行为时,它是最关键的诊断手段。
日志级别从高到低:emerg → alert → crit → error → warn → notice → info → debug
级别越低,记录越详细。debug 是最低(最细粒度)级别,会输出变量值、匹配过程、内部状态跳转等;emerg 是最高(最严重)级别,只记录导致服务不可用的致命事件。
- warn 和 error 是生产环境推荐级别,兼顾可读性与性能——日志量适中,能捕获异常但不拖慢请求处理
-
debug 必须配合
--with-debug编译参数启用,否则即使配置error_log ... debug也不会输出调试内容 - 日志级别具有“向上包含”特性:设为
warn,则warn、error、crit等更高级别事件都会记录;设为debug,所有级别都生效
开启调试日志的三步硬性前提
缺一不可,否则 debug 日志始终为空:
- Nginx 编译时必须含
--with-debug参数(源码安装需重新 configure + make;包管理器安装如 apt/yum 通常不含该模块,需自行编译) - 配置中明确指定
error_log /path/to/error.log debug;(路径可自定义,级别必须写debug) - 执行
nginx -s reload或重启使配置生效(注意:仅nginx -t不会触发日志级别加载)
精准调试:避免日志爆炸的实用技巧
全站开 debug 容易压垮磁盘和 I/O,尤其在高并发场景下。应缩小作用域:
- 用
debug_connection限定 IP:error_log /var/log/nginx/debug.log debug; debug_connection 192.168.1.100;,只对指定客户端输出调试信息 - 在特定
server或location块内单独配置error_log,让调试聚焦于目标服务而非全局 - 结合
rewrite_log on;(需同时开启 debug 日志)查看重写规则的实际匹配与执行路径 - 用
curl -v或curl -I配合日志观察,比盲目刷请求更高效
访问日志与错误日志分工明确
二者用途不同,不能互相替代:
-
access_log 记录每次 HTTP 请求(IP、URL、状态码、耗时等),用于流量分析、安全审计、PV/UV 统计;格式由
log_format定义,不涉及内部逻辑 - error_log 记录 Nginx 自身运行问题(配置加载失败、worker 异常退出、SSL 握手错误、rewrite 执行异常等),是定位功能故障的核心依据
- 关闭某类日志可用
error_log /dev/null;或access_log off;,但调试期间建议保留 access_log 便于关联请求上下文


















