如何通过ElasticSearch高级Java客户端记录JSON查询以进行调试?

16

我在我的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

1
感谢Opster Elasticsearch Ninja提供的解决方案。 - user1250720
1
这些日志配置设置非常好,因为我能够获取HTTP请求。 - devwebcl
3个回答

13

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,你还可以在application.properties中配置tracer日志器的TRACE级别:

logging.level.tracer=TRACE

9
您可以使用以下代码在日志记录器中简单记录使用rest-high level客户端构建的查询。
您还可以控制要记录哪些类型的查询以及在特定情况下设置哪些级别(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 字符串。

如果您遇到任何问题,请告诉我,我使用 rest-high-level 客户端经常这样做。


1
谢谢 @Opster Elasticsearch Ninja。这正是我在寻找的。 - user1250720

0

Spring Data Elasticsearch有关于如何进行客户端日志记录的指南。

要查看实际发送到服务器和接收到的内容,需要打开传输级别的请求/响应日志记录,如下面片段所概述。

启用传输层日志记录

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

当通过RestClients或ReactiveRestClients获取RestHighLevelClient和ReactiveElasticsearchClient时,以上内容均适用。

https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#elasticsearch.clients.logging


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接