直接将错误日志级别设为error或更高(如crit、alert)即可只记录严重问题;error_log指令为包含式过滤,指定级别即记录该级及更严重日志,如error级别会记录error、crit、alert、emerg;默认即为error,无需额外配置;warn及以下级别易干扰排查,生产环境应避免;可按需在server块中覆盖全局配置;也可用/dev/null emerg彻底屏蔽非紧急日志。

直接把错误日志级别设为 error 或更高(如 crit、alert),就能只记录严重问题,跳过 warn、notice、info、debug 这些非关键提示。
明确设置 error 级别及以上
error_log 指令是“包含式”过滤:指定某个级别,就记录该级别及其更严重的日志。比如:
-
error_log /var/log/nginx/error.log error;→ 记录 error、crit、alert、emerg -
error_log /var/log/nginx/error.log crit;→ 只记录 crit 及以上(alert/emerg) - 不写 level 时默认就是 error,所以
error_log /var/log/nginx/error.log;已满足基本需求
避免低级别日志干扰
debug、info、notice、warn 这几级会输出大量运行细节或潜在提醒,对定位真正故障帮助有限,反而稀释关键线索:
- 不要用
info或notice,它们会产生高频日志,加重磁盘 I/O 和排查负担 -
warn虽比 info 少,但仍含非致命提示(如模块加载警告),生产环境通常不需保留 - 若只需抓崩溃级问题,直接选
crit或alert;日常运维推荐error平衡可读性与简洁性
按需隔离日志作用域
全局设为 error 后,如某 server 块需要更严格(比如只记 alert),可在该块内单独配置:
- 在
http块设全局:error_log /var/log/nginx/error.log error; - 在特定
server块覆盖:error_log /var/log/nginx/api_error.log alert; - 注意:同一配置块内不能出现多个
error_log指令,否则会冲突
彻底屏蔽非错误信息
如果连 warn 都不想看到,又不想改级别,可用系统级方式丢弃:
- 配置
error_log /dev/null emerg;—— 所有低于 emerg 的日志全部丢弃,只留最紧急事件(极少用) - 或用 logrotate + 定时清理策略,确保 error.log 不因历史 warn 积压而变大











