是否记录通过ElasticSearch高级Java客户端构建的JSON查询以进行调试?

r1zk6ea1  于 2022-11-02  发布在  ElasticSearch
关注(0)|答案(3)|浏览(159)

我在我的Sping Boot 应用程序中使用ElasticSearch高级客户端Java API。我想记录使用高级客户端API构建的查询以用于调试目的。
我的问题是,在www.example.com文件中需要什么样的设置application.properties才能打开从应用程序构建的JSON查询?
我对www.example.com文件尝试了以下属性application.properties,但是,它不能打印使用各种查询构建器构建的JSON查询。

logging.level.org.elasticsearch.client=TRACE
logging.level.org.elasticsearch.client.sniffer=TRACE
logging.level.org.elasticsearch=TRACE
2g32fytz

2g32fytz1#

您可以简单地记录使用rest-high级别客户端构建的查询,在您的记录器中使用下面的代码。

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

用于获取和记录搜索JSON的代码

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

第一行用于创建搜索请求,第二行用于打印search JSON,注意searchRequest.source().toString())用于获取搜索JSON字符串。
让我知道,如果你遇到任何问题,我这样做的所有时间使用其余的高级客户端。

wa7juj8i

wa7juj8i2#

elasticsearch logging doc看起来太含糊了,但它提到了tracer
启用跟踪程序包的跟踪日志记录,以便打印出此类日志行。
如果深入研究es客户端代码,就会发现有一个名为org.apache.http.util.EntityUtils.RequestLogger的类,它将所有请求和响应的详细信息记录到名为tracer的记录器中:

private static final Log tracer = LogFactory.getLog("tracer");

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

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

logback.xml为例:

<appender name="ES_REQ_RES_TRACER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/es-trace</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>logs/es-trace.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxHistory>3</maxHistory>
            <maxFileSize>500MB</maxFileSize>
        </rollingPolicy>
        <encoder>
            <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="tracer" additivity="false" level="trace">
        <appender-ref ref="ES_REQ_RES_TRACER" />
    </logger>

现在你可以在logs/es-trace文件中找到跟踪细节,它包含一个curl请求和一个json响应。
如果您使用 Spring Boot ,则tracer记录器的TRACE级别也可以在application.properties中配置:

logging.level.tracer=TRACE
kxxlusnw

kxxlusnw3#

Spring Data Elasticsearch有关于如何进行客户端日志记录的指南。
要查看实际发送到服务器和从服务器接收的内容,需要打开传输级别上的请求/响应日志记录,如下面的代码片段所示。
启用传输层日志记录

<logger name="org.springframework.data.elasticsearch.client.WIRE" level="trace"/>

当分别通过RestClient和ReactiveRestClient获得时,上述内容适用于RestHighLevelClient和ReactiveElasticsearchClient。
https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#elasticsearch.clients.logging

相关问题