error_log级别共8级,从低到高为debug、info、notice、warn、error、crit、alert、emerg;级别越低记录越详细,越高仅记崩溃事件;生产环境全局推荐error,关键server设warn,debug需编译启用--with-debug且须谨慎使用。

选对 error_log 级别,不是追求最细或最简,而是让日志在关键时候说清楚关键话——既不淹没有效线索,也不漏掉致命异常。
级别含义与记录范围
error_log 共 8 级,从低到高为:debug、info、notice、warn、error、crit、alert、emerg。级别越低,记录越详细(比如 debug 会输出变量值、配置加载步骤、信号处理过程);级别越高,只记崩溃级事件(如端口绑定失败、主进程退出、内存分配失败)。
注意:日志是“包含式”过滤——设为 warn,就会记录 warn 及更严重(error/crit/alert/emerg)的日志;设为 error,则只记 error 及以上,debug/info/notice 全部被跳过。
生产环境推荐配置策略
长期开启 debug 会导致日志量爆炸、磁盘写满、IO 压力陡增,不适用于线上。合理分层才是重点:
- 全局(main 块)默认设 error:覆盖 worker 异常退出、模块加载失败、配置解析崩溃等核心问题
- 关键 server 块设 warn:捕获证书过期、重定向循环、upstream 连接拒绝等高价值预警
- 非核心或静态资源 location 可关日志或设 error:避免 404、favicon.ico 找不到等冗余记录
- 临时诊断时再升 info 或 notice:比如 reload 行为异常、worker fork 失败,可快速定位生命周期卡点
debug 级别的启用前提与实操要点
debug 不是加个单词就能用。它有两个硬性条件:
- Nginx 编译时必须含 --with-debug(运行
nginx -V 2>&1 | grep -o with-debug验证) - error_log 指令需明确写成
error_log /path/to/debug.log debug;,且路径对 worker 进程可写
启用后建议立即配合过滤使用,例如:
tail -f /var/log/nginx/debug.log | grep -E "(conf|signal|cycle|init)"避免全量日志刷屏。容器环境更推荐输出到 syslog:server=unix:/dev/log,由 journald 统一管理。
按故障类型匹配日志级别
不同问题需要不同粒度的日志支撑:
- 启动失败(报 emerg)、reload 报错 → 先看全局 error_log,同时运行
nginx -t -v定位语法行号 - 502/504 频发、upstream refused → 在对应 server 或 upstream 块内设
error_log ... warn,聚焦连接类告警 - 怀疑 SELinux 或权限问题(如 Permission denied)→ 设
notice或info,观察 openat()、stat() 等系统调用路径 - worker 进程莫名退出又无明显日志 → 结合
journalctl -u nginx -n 100和dmesg | tail -20查 OOM 或内核限制











