You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何过滤Quarkus HTTP访问日志中的Elasticsearch滚动请求等冗余日志?

解决Quarkus Access Log被Elasticsearch Scroll请求淹没的问题

核心问题说明

你之前配置的quarkus.http.access-log.exclude-pattern=(_index+)无效,是因为这个配置只能匹配请求路径/参数,无法识别响应体中的_index字段。下面提供几个便捷的解决方法:


方法1:通过请求路径直接排除ES Scroll请求(最简单)

ES的Scroll请求路径通常是固定的(比如/_search/scroll),直接用路径匹配排除这类请求,无需处理响应内容,性能最优:
在application.properties中添加:

quarkus.http.access-log.exclude-pattern=/_search/scroll(/.*)?

这个正则会匹配所有以/_search/scroll开头的请求路径,直接过滤掉所有ES Scroll相关的access日志。


方法2:自定义AccessLogFilter(灵活匹配响应内容)

如果Scroll请求路径不固定,需要基于响应体中的_index字段过滤,可以自定义过滤器实现:

  1. 编写过滤器类:
import io.quarkus.vertx.http.runtime.filters.AccessLogFilter;
import io.vertx.ext.web.RoutingContext;
import jakarta.enterprise.context.ApplicationScoped;

@ApplicationScoped
public class ExcludeESResponseFilter implements AccessLogFilter {

    @Override
    public boolean shouldLog(RoutingContext ctx) {
        // 先判断是否是ES相关请求(可选,提升性能)
        String requestPath = ctx.request().path();
        if (requestPath.contains("/_search")) {
            // 获取响应体,判断是否包含_index字段
            String responseBody = ctx.response().getBodyAsString();
            return responseBody == null || !responseBody.contains("\"_index\"");
        }
        // 非ES请求正常记录日志
        return true;
    }
}
  1. 在配置中指定过滤器:
quarkus.http.access-log.filter=com.your.package.ExcludeESResponseFilter

注意:如果响应体过大,getBodyAsString()可能有性能损耗,建议结合请求路径预判缩小范围。


方法3:调整ES客户端日志级别(快速屏蔽所有ES日志)

如果你不需要ES客户端的任何日志,可以直接调低其日志级别:

quarkus.log.category."org.elasticsearch.client".level=WARN

这个方法会关闭ES客户端的DEBUG/INFO级日志,包括access log中对应的请求记录,但会影响所有ES相关日志的输出,按需选择。


内容的提问来源于stack exchange,提问作者Jan5676

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 03:02:02