josmaf
josmaf

Reputation: 148

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?

Upvotes: 3

Views: 5388

Answers (4)

Yelling Aung
Yelling Aung

Reputation: 101

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

Upvotes: 0

GlaIZier
GlaIZier

Reputation: 835

Just in case someone doesn't want to bother oneself with loggers, it's possible to call toString() on QueryBuilder and see a request.

Upvotes: 2

spats
spats

Reputation: 853

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

Upvotes: 0

Mysterion
Mysterion

Reputation: 9320

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

Upvotes: 4

Related Questions