【问题标题】:Enabling Java REST Client logging in Elasticsearch in Curl format在 Elasticsearch 中以 Curl 格式启用 Java REST 客户端日志记录
【发布时间】:2019-01-11 15:03:09
【问题描述】:

我正在使用 org.elasticsearch.client.RestHighLevelClient 来运行查询。

根据官方文档,可以使用 curl 格式记录请求:

https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-low-usage-logging.html

我在 log4j.properties 中添加了以下行:

log4j.logger.org.elasticsearch.client = debug

现在我看到了 http 请求,但是,如何设置 curl 格式?

【问题讨论】:

    标签: java elasticsearch curl log4j


    【解决方案1】:

    根据他们的文档,你需要启用特定的tracer logger,它专门负责 curl 格式的响应。

    您可以在 log4j 1.x 中通过以下几行实现此目的:

    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.out
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] [%-5p] %c{1}:%L - %m%n
    
    log4j.logger.tracer=TRACE, stdout
    

    【讨论】:

      【解决方案2】:

      以防万一有人不想用记录器打扰自己,可以在QueryBuilder 上致电toString() 并查看请求。

      【讨论】:

      • 如果您已经有一个包含多个 QueryBuilder 的请求,request.source().toString() 会为您提供整个查询。
      【解决方案3】:

      启用 RestHighLevelClient 7.+ 版本的跟踪以显示弹性客户端进行的休息调用的 url。执行以下步骤

      1. 添加依赖项(如果基于 maven,则在 pom 中) slf4j-api , slf4j-log4j12, jcl-over-slf4j : slf4j 使 log4j 与弹性使用的公共日志记录一起工作 logback-classic :弹性使用的公共日志记录 log4j-core , log4j-api : log4j2 依赖项
      2. 在 log4j 属性中启用跟踪器 log4j.logger.tracer=TRACE,标准输出

      文件级别更改 在 pom.xml 中添加这些依赖项

      <!-- log4j2 -->
              <dependency>
                  <groupId>org.apache.logging.log4j</groupId>
                  <artifactId>log4j-api</artifactId>
                  <version>2.11.2</version>
              </dependency>
              <dependency>
                  <groupId>org.apache.logging.log4j</groupId>
                  <artifactId>log4j-core</artifactId>
                  <version>2.11.2</version>
              </dependency>
              <!-- slf4j to make log4j work with commons logging used by elastic -->
              <dependency>
                  <groupId>org.slf4j</groupId>
                  <artifactId>slf4j-api</artifactId>
                  <version>1.7.12</version>
              </dependency>
              <!-- To bind log4j2 to sl4j -->
              <dependency>
                  <groupId>org.slf4j</groupId>
                  <artifactId>slf4j-log4j12</artifactId>
                  <version>1.7.12</version>
                  <scope>test</scope>
              </dependency>
              <!-- To bind commons logging used by elastic to sl4j -->
              <dependency>
                  <groupId>org.slf4j</groupId>
                  <artifactId>jcl-over-slf4j</artifactId>
                  <version>1.7.12</version>
              </dependency>
              <!-- commons logging used by elastic -->
              <dependency>
                  <groupId>ch.qos.logback</groupId>
                  <artifactId>logback-classic</artifactId>
                  <version>1.2.3</version>
                  <exclusions>
                      <exclusion>
                          <!-- Defined below -->
                          <artifactId>slf4j-api</artifactId>
                          <groupId>org.slf4j</groupId>
                      </exclusion>
                  </exclusions>
              </dependency>
      

      log4j2.properties 文件的变化

      status = error
      name = PropertiesConfig
      filters = threshold
      filter.threshold.type = ThresholdFilter
      filter.threshold.level = debug
      appenders = console
      appender.console.type = Console
      appender.console.name = STDOUT
      appender.console.layout.type = PatternLayout
      appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
      rootLogger.level = debug
      rootLogger.appenderRefs = stdout
      rootLogger.appenderRef.stdout.ref = STDOUT
      log4j.logger.tracer=TRACE, stdout
      

      【讨论】:

        【解决方案4】:

        对于 log4j version 2.x,在 log4j2.properties 文件中添加以下配置。

        # Debugging elasticsearch client
        loggers=esclient, esclientsniffer, tracer
        
        logger.esclient.name = org.elasticsearch.client
        logger.esclient.level = trace
        logger.esclient.appenderRefs = stdout
        logger.esclient.appenderRef.stdout.ref = STDOUT
        
        logger.esclientsniffer.name = org.elasticsearch.client.sniffer
        logger.esclientsniffer.level = trace
        logger.esclientsniffer.appenderRefs = stdout
        logger.esclientsniffer.appenderRef.stdout.ref = STDOUT
        
        logger.tracer.name=tracer
        logger.tracer.level=trace
        logger.tracer.appenderRefs = stdout
        logger.tracer.appenderRef.stdout.ref = STDOUT
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多