记录通过 ElasticSearch 高级 Java 客户端构建的 JSON 查询以进行调试?
log JSON queries built through ElasticSearch High Level Java Client for debugging?
我在 Spring 引导应用程序中使用 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
您可以简单地记录使用 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 字符串。
如果您遇到任何问题,请告诉我,我一直使用 rest-high-level 客户端这样做。
es logging doc 好像太含糊了,不过里面提到了 tracer
:
Enable trace logging for the tracer package to have such log lines printed out.
如果你深入研究 es 客户端代码,有一个名为 org.apache.http.util.EntityUtils.RequestLogger
的 class,它将所有请求和响应详细信息记录到名为 tracer
:[=27 的记录器中=]
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 响应。
TRACE
tracer
logger 的级别也可以在 application.properties
中配置,如果你使用 spring boot:
logging.level.tracer=TRACE
我在 Spring 引导应用程序中使用 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
您可以简单地记录使用 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 字符串。
如果您遇到任何问题,请告诉我,我一直使用 rest-high-level 客户端这样做。
es logging doc 好像太含糊了,不过里面提到了 tracer
:
Enable trace logging for the tracer package to have such log lines printed out.
如果你深入研究 es 客户端代码,有一个名为 org.apache.http.util.EntityUtils.RequestLogger
的 class,它将所有请求和响应详细信息记录到名为 tracer
:[=27 的记录器中=]
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 响应。
TRACE
tracer
logger 的级别也可以在 application.properties
中配置,如果你使用 spring boot:
logging.level.tracer=TRACE