简体   繁体   中英

Enabling Java REST Client logging in Elasticsearch in Curl format

I'm using org.elasticsearch.client.RestHighLevelClient to run queries.

According to the official documentation, it's possible to log requests in curl format:

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

I have added the following line to my log4j.properties:

log4j.logger.org.elasticsearch.client = debug

Now I see http requests, but, how can I set curl formatting?

According to their documentation, you need to enable specific tracer logger, that is responsible specifically for curl format response.

You could achieve this in log4j 1.x with following lines:

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

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

To enable trace for RestHighLevelClient 7.+ version to show url for rest calls made by elastic client. Do below steps

  1. Add dependencies (in pom if maven based) slf4j-api , slf4j-log4j12, jcl-over-slf4j : slf4j to make log4j work with commons logging used by elastic logback-classic : commons logging used by elastic log4j-core , log4j-api : log4j2 dependencies
  2. Enable tracer in log4j properties log4j.logger.tracer=TRACE, stdout

File level changes Add these dependencies in 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>

Changes in log4j2.properties file

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

For log4j version 2.x , add following configuration in log4j2.properties file.

# 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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM