如何在Spring-data-elasticsearch中启用查询日志记录

我使用spring-data-elasticsearch框架从elasticsearch服务器获取查询结果,Java代码如下:

SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(matchAllQuery()).withSearchType(SearchType.COUNT)
.addAggregation(new MinBuilder("min_createDate").field("createDate"))
.build();

List<Entity> list = template.queryForList(searchQuery, Entity.class);

虽然我如何知道发送到弹性搜索服务器的原始http查询?如何启用日志记录,我尝试添加log4j,但似乎spring-data-elasticsearch没有记录查询。


答案 1

在挖掘了弹簧数据代码后,我发现了这个有用的小记录器,称为“示踪剂”(名称不是很独特)

通过在应用程序.属性中设置以下内容

logging.level.tracer=TRACE

它将为请求打印出完整的 curl 语句以及来自 Elasticsearch 的完整 JSON 响应。


答案 2

这个已经很老了,但我仍然想分享对我有用的解决方案。要记录通过存储库执行的Spring Data Elasticsearch查询,您需要为软件包启用日志记录,例如:DEBUGorg.springframework.data.elasticsearch.core.*

logging:
  level:
    org:
      springframework:
        data:
          elasticsearch:
            core: DEBUG

之后,查询将显示在日志中:

{
  "from" : 0,
  "size" : 1,
  "query" : {
    "bool" : {
      "should" : [ {
        "query_string" : {
          "query" : "John Doe",
          "fields" : [ "entityName" ],
          "default_operator" : "and"
        }
      }, {
        "query_string" : {
          "query" : "John Doe",
          "fields" : [ "alias" ],
          "default_operator" : "and"
        }
      } ]
    }
  },
  "post_filter" : {
    "bool" : { }
  }
}

人们会期望一个类似于JPA的优雅解决方案,但似乎它并不简单存在。

使用Spring Boot 1.4.0和Spring Data Elasticsearch 1.7.3进行测试。


推荐