当前位置: 首页 > 知识库问答 >
问题:

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

申浩广
2023-03-14

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

我的问题是我的应用程序需要什么样的设置。属性文件来打开从我的应用程序生成的JSON查询?

我在应用程序中尝试了以下属性。属性文件。但是,它不会打印使用各种查询生成器生成的JSON查询。

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

共有2个答案

洪高阳
2023-03-14

es日志文档似乎太含糊不清了,但它提到了跟踪

启用跟踪程序包的跟踪日志记录,以便打印出这样的日志行。

如果深入到es客户端代码中,有一个名为org.apache.http.util.EntityUtils的类。recestLogger,它将所有请求和响应的详细信息记录到名为跟踪器的记录器中:

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

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

所以正确的表达请求的方式

使用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>

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

TRACElevel fortracer记录器也可以在应用程序中配置。属性如果使用spring boot:

logging.level.tracer=TRACE
楚涵润
2023-03-14

您只需在记录器中使用下面的代码,记录使用rest高级客户端生成的查询。

您还可以控制要记录的查询类型,以及在特定情况下要设置的级别类型(跟踪、信息、调试)。

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

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

如果您遇到任何问题,请告诉我,我一直在使用rest高级客户机。

 类似资料:
  • 问题内容: 我能够通过基于HTTP的客户端中的查询来实现功能,但不能基于基于Java的客户端中。 通过客户端(基于HTTP REST),可以通过查询字符串实现聚合。 JEST示例代码: JEST客户端的打印响应显示聚合结果。 使用中,有可能通过。 当我尝试在中实现JSON查询时 ,它没有返回聚合结果。 TCP是否不支持通过查询字符串进行聚合但支持添加聚合选项的任何原因? TCP Java客户端示例

  • 这是我的Elasticsearch sql查询。我使用Kibana执行了这个查询,并得到了有效的输出。 明白吗?format=json{“query”:“从eps_stbl_日志中选择Count(appId),其中cast(timestamp AS DATE)=TODAY()和status='COMPLETED'” 这需要在restHighLevelClient java API中编写。你能帮助编

  • 我正在尝试从ElasticSearch 2过渡到5或6。我想我想直接跳到6.1.1并使用RestHighLevelClient,因为它比低级rest客户端更接近我正在使用的现有传输客户端。 但是,我遇到了一个问题作为集成测试的一部分,我正在创建索引并插入特定数据,因此我知道我的查询是正确的。我似乎无法在High Level客户端中做到这一点。特别是,我希望能够调用: 但是,client.indic

  • 问题内容: 在我的文件中,我尝试实现一些映射,其中使用不同的分析器将属于一种类型的一个字段索引到其余字段。 目前,yaml文件具有以下结构: 这不会将自定义分析器应用于标题字段,因此我希望有人可以为我指出将自定义分析器应用于各个字段的正确方向? 问题答案: 我在ml中回答了这个问题: 如果您使用的是Java,则不必使用yml文件。您可以,但不必。 如果您使用的是Spring,则可以查看ES spr

  • 我正在尝试将数据插入bonsai上托管的ElasticSearch(版本7.4.2)。io云。当我尝试创建IndexRequest时 我的pom。xml具有以下依赖关系: 我甚至尝试将以下依赖项添加到我的pom.xml 有人能在7.4.2版本中帮我解决这个问题吗?

  • 问题内容: 该站点仅包含JSON文档,而没有Java客户端。我应该执行某种映射吗? 例如地理位置查询:http : //www.elasticsearch.org/guide/reference/query- dsl/geo-distance-range- filter.html 如何使用Java客户端编写这样的查询? 谢谢杰森 问题答案: 不明显但不那么复杂;)