跳到主要内容

error-log-collect

error-log-collect 插件捕获网关在处理匹配请求时产生的错误日志,并将其写入网关错误日志(error.log)。捕获的日志条目包括 INFODEBUG 等所配置的错误日志级别通常会丢弃的低级别日志。这使你能够针对部分目标流量收集详细的、按请求维度的诊断日志,而无需为所有请求降低全局错误日志级别。

每条捕获的日志均以 error 级别写入,并带有 [error-log-collect] 前缀和请求 ID,便于你在网关日志中过滤和关联这些条目。使用 vars 将收集范围限定为满足条件的请求,使用 sample_ratio 在高流量路由上仅捕获一部分请求。

该插件配置在路由或服务上,自 API7 企业版 3.10.0 版本起可用。

示例

以下示例演示了如何在不同场景下配置 error-log-collect 插件。

在路由上收集错误日志

以下示例演示了如何在路由上启用该插件并查看收集到的日志。

创建一个上游为 httpbin.org 并启用 error-log-collect 插件的路由:

curl "http://127.0.0.1:9180/apisix/admin/routes" -X PUT \
-H "X-API-KEY: ${ADMIN_API_KEY}" \
-d '{
"id": "error-log-collect-route",
"uri": "/anything",
"plugins": {
"error-log-collect": {}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}
}'

向该路由发送请求:

curl -i "http://127.0.0.1:9080/anything"

你应该会收到 HTTP/1.1 200 OK 响应。

在网关日志中查找以 [error-log-collect] 为前缀的条目,每个条目都带有请求 ID。插件会重新输出处理请求时生成的内部日志,其中包括 DNS 解析和上游选择等 INFO 级别条目;默认的 warn 日志级别通常会省略这些条目:

2026/06/26 09:21:31 [error] 47#47: 1750901491123#0 [error-log-collect] 2026-06-26 09:21:31 b9f8c1d2e3a4f5061728394a5b6c7d8e parse_domain():118: dns resolve httpbin.org, context: ngx.timer
备注

插件会在每个工作进程的内存中缓冲捕获的日志,最多可保存 buffer_max_size 个条目。当请求匹配 vars 时,插件会将其刷新到 error.log;如果未设置 vars,则会对每个请求执行刷新。缓冲区由同一工作进程处理的所有请求共享,因此刷新时也可能输出该工作进程近期其他请求的缓冲日志。这有助于捕获匹配事件发生前的上下文。

仅收集匹配请求的日志

要仅收集满足条件的请求的日志,请将 vars 设置为一个或多个 APISIX 表达式。例如,以下配置仅在请求带有 X-Debug: true 请求头时收集日志:

{
"plugins": {
"error-log-collect": {
"vars": [
["http_x_debug", "==", "true"]
]
}
}
}

不匹配条件的请求不会自行将日志刷写到错误日志。在高流量路由上,可以将 sample_ratio 设置为小于 1 的值,仅收集随机抽样的部分请求,以保持日志量可控。