12

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

2 回答 2

9

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

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

获取和记录搜索 JSON 的代码

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

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

如果您遇到任何问题,请告诉我,我一直使用其余高级客户端来执行此操作。

于 2020-03-25T15:30:38.443 回答
2

es logging doc似乎太模棱两可,但它提到tracer

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

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

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

在 methodlogResponse中,您可以看到它将调试信息记录到普通包记录器中,将跟踪信息记录到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 响应。

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

logging.level.tracer=TRACE
于 2021-08-11T06:31:05.693 回答