nginx error_log级别决定日志详略程度,推荐生产环境设为error或warn;支持emerg至debug共8级,常用6级按严重性降序排列;可按模块或location精细化启用debug子级别;需配合logrotate控制日志体积。

在 Nginx 中,error_log 的记录级别直接决定哪些错误、警告或调试信息会被写入日志文件。级别设得过高(如 debug)会导致日志爆炸式增长;设得过低(如 crit)又可能漏掉关键排错线索。合理设置级别是精简日志、聚焦问题的关键一步。
理解 error_log 支持的日志级别(从高到低)
Nginx 定义了 8 个日志级别,实际常用的是以下 6 个(级别越低,记录越详细):
- emerg:系统不可用(如 fork 失败),极少出现
- alert:必须立即处理的严重问题(如配置加载失败)
- crit:关键错误(如无法绑定端口、磁盘满)
- error:一般错误(如 upstream 连接拒绝、SSL 握手失败)
- warn:潜在问题提示(如证书即将过期、不推荐的配置用法)
- notice:重要但非错误事件(如 worker 启动、重载成功)
- info:常规运行信息(如模块初始化)
-
debug:极细粒度调试信息(需编译时启用
--with-debug)
推荐的生产环境 error_log 级别设置
日常运维中,建议将全局 error_log 设为 error 或 warn,兼顾可读性与排错能力:
- 线上稳定服务:使用
error_log /var/log/nginx/error.log error; - 需要关注配置合理性或证书状态:改用
warn - 避免使用
info和debug,除非临时排查特定问题 - 不要留空级别(如
error_log /path;),Nginx 默认为error,但显式声明更清晰
按模块或 location 精细化控制 debug 日志
若需临时开启某类调试信息(如 SSL 或 rewrite),可在对应上下文中单独设置 error_log,且仅限 debug 级别(需已启用 debug 编译):
- 在
http块中添加:error_log /var/log/nginx/ssl_debug.log debug_ssl; - 在
location ~ \.php$中加:error_log /var/log/nginx/php_debug.log debug; - 注意:
debug_*子级别(如debug_http、debug_event)只能用于debug主级别下,且不支持在server或location中混用多个子级别
配合 logrotate 控制日志体积
即使设置了合适的级别,长期运行仍会产生大量日志。务必搭配系统级日志轮转:
- 配置
/etc/logrotate.d/nginx,启用按天切割、保留 7 天、自动压缩 - 确保 Nginx 支持
USR1信号重开日志文件(logrotate 默认会发送) - 检查
error_log路径权限,确保 nginx worker 进程能写入新日志文件











