nginx生产环境应仅启用warn和error两级日志:warn用于故障前预警(如证书将过期、upstream临时下线),error记录明确失败(如502/504、权限拒绝);其他级别仅限临时或特定场景使用。

线上 Nginx 的 error_log 级别不是越细越好,也不是越简越稳,关键在“分得清、看得准、压得住”。真正该用的只有 warn 和 error 两级,其他级别要么太重(debug/info),要么太轻(crit/emerg),多数时候反而干扰判断。
warn:生产环境最实用的预警级
warn 级别记录的是故障发生前的明确信号,不等错误真正爆发就提前示警。它既不会淹没日志,又能帮你抢在用户投诉前发现问题。
- 证书即将过期(比如剩余 7 天)
- upstream 被临时标记为 down(但还没彻底断连)
- 重定向循环被截断(
too many redirects) - client body 超限但已自动截断(
client intended to send too large body)
error:默认且必须保留的失败级
error 是 Nginx 默认级别,只记录明确失败的事件。它不负责预警,只负责确认“这事确实没成”。
- 502/504(后端不可达或超时)
- rewrite 规则语法错误(
invalid number of arguments in "rewrite" directive) - open() 权限拒绝(
Permission denied) - 模块加载失败(如
ngx_http_geoip2_module找不到共享库)
notice 及 info:仅限特定场景临时启用
notice 和 info 不适合长期开启,但在验证配置变更或排查连接链路时有独特价值。
- notice 可看到
reconfiguring、start worker processes等 reload 生命周期事件 - info 有助于跟踪 SSL 握手是否完成、upstream 如何被选中、连接是否复用
- 建议只在单个
server或location块中启用,避免全局污染
debug 与 crit 及以上:慎用、禁用或仅限极端情况
debug 必须编译时启用 --with-debug,否则配置无效;crit、alert、emerg 则基本只在进程崩溃、内存耗尽、端口绑定失败等底层异常时触发。
- debug 日志量极易突破 GB/天,含变量值、内存路径、配置树结构,仅限短时精准诊断
- emerg 表示服务已无法继续运行(如主进程退出前最后一条日志)
- crit 及以上日常几乎看不到,也不建议设为默认级别——漏掉 warn/error 就等于放弃可观测性











