温馨提示×

如何过滤nginx错误日志

小樊
38
2026-10-10 05:24:59
栏目: 编程语言

在 Nginx 中,“过滤错误日志”通常指两件事之一:

  1. 运行时按级别/内容过滤日志(控制记录什么)
  2. 事后从已生成的 error.log 中过滤查看

下面分别说明。


一、运行时控制 Nginx 错误日志(推荐)

1. 调整错误日志级别

Nginx 错误日志级别(从低到高):

debug < info < notice < warn < error < crit < alert < emerg

示例(只记录 warn 及以上):

error_log /var/log/nginx/error.log warn;

常见做法:

  • 生产环境:error 或 crit
  • 排错时临时:debug(需 --with-debug 编译)

2. 按 location / 虚拟主机过滤

不同 location 使用不同日志:

server {
    error_log /var/log/nginx/error.log error;

    location /api/ {
        error_log /var/log/nginx/api_error.log warn;
    }

    location /static/ {
        error_log off;  # 关闭错误日志
    }
}

3. 忽略特定错误(通过条件日志)

Nginx 不能直接“忽略某类错误”,但可以:

  • 用 error_log 级别降低噪声
  • 用 lua / split_clients 等高级模块控制

示例(OpenResty / Lua):

error_log /var/log/nginx/error.log;

lua_shared_dict err_filter 10m;

init_by_lua_block {
    ngx.shared.err_filter:set("ignore_404", true)
}

二、事后过滤已存在的 error.log

1. 按关键字过滤

grep "connect() failed" /var/log/nginx/error.log

2. 排除某些错误

grep -v "No such file" /var/log/nginx/error.log

3. 按时间过滤

awk '$1 >= "[2024-01-01" && $1 <= "[2024-01-02"' /var/log/nginx/error.log

4. 按级别过滤

grep -E "\[error\]|\[crit\]" /var/log/nginx/error.log

三、常见“想过滤掉”的错误及建议

错误 建议
open() ".../favicon.ico" failed 放默认 favicon 或忽略
client closed connection 正常,可降低日志级别
upstream timed out 保留,重要
SSL handshake failed 按需保留

四、总结建议

  • ✅ 用 error_log level 控制噪声
  • ✅ 用 location 级日志分离模块
  • ❌ 不要用 error_log off 全局关闭
  • ✅ 事后用 grep / awk 分析

如果你愿意,可以告诉我:

  • 你是 想少记日志 还是 想分析已有日志
  • 具体想过滤哪种错误(贴一行日志最好)

我可以给你更精确的配置。

0 踩