记录通过 ElasticSearch 高级 Java 客户端构建的用于调试的 JSON 查询?

use*_*720 9 logging elasticsearch resthighlevelclient

我在 Spring Boot 应用程序中使用 ElasticSearch 高级客户端 Java API。我想记录使用高级客户端 API 构建的查询以进行调试。

我的问题是我的 application.properties 文件中需要什么样的设置才能打开从我的应用程序构建的 JSON 查询?

我在 application.properties 文件中尝试了以下属性。但是,它不会打印使用各种查询构建器构建的 JSON 查询。

logging.level.org.elasticsearch.client=TRACE
logging.level.org.elasticsearch.client.sniffer=TRACE
logging.level.org.elasticsearch=TRACE
Run Code Online (Sandbox Code Playgroud)

pup*_*lpg 13

elasticsearch 日志记录文档似乎太含糊,但它提到tracer

为跟踪程序包启用跟踪日志记录以打印出此类日志行。

如果您深入研究 es 客户端代码,会发现有一个名为 的类org.apache.http.util.EntityUtils.RequestLogger,它将所有请求和响应详细信息记录到名为 的记录器中tracer

private static final Log tracer = LogFactory.getLog("tracer");
Run Code Online (Sandbox Code Playgroud)

在方法中logResponse,您可以看到它将调试信息记录到普通包记录器中,将跟踪信息记录到tracer记录器中。

因此,显示请求和响应跟踪信息的正确方法是配置一个名为 的记录器tracer,并TRACE为其启用级别。

使用logback.xml例如:

private static final Log tracer = LogFactory.getLog("tracer");
Run Code Online (Sandbox Code Playgroud)

现在您可以在文件中找到跟踪详细信息logs/es-trace。它将包含一个curl 请求和一个json 响应。

TRACEtracer如果您使用 Spring Boot ,也可以配置记录器的级别application.properties

logging.level.tracer=TRACE
Run Code Online (Sandbox Code Playgroud)


Ami*_*wal 8

您可以简单地记录使用其余高级客户端构建的查询,在您的记录器中使用以下代码。

您还可以控制要记录的查询类型以及要在特定情况下设置的级别类型(TRACE、INFO、DEBUG)。

获取和记录搜索 JSON 的代码

SearchRequest searchRequest = new SearchRequest("employee").source(sourceBuilder);
log.info("Search JSON query: {}", searchRequest.source().toString());
Run Code Online (Sandbox Code Playgroud)

第一行用于创建搜索请求,第二行用于打印search JSON, NotesearchRequest.source().toString())用于获取搜索 JSON 字符串。

如果您遇到任何问题,请告诉我,我一直使用 rest-high-level 客户端执行此操作。