Shades88
Shades88

Reputation: 8360

Elasticsearch java api error java.lang.NoClassDefFoundError: org/apache/logging/log4j/Logger

I am using java elasticsearch 5.4 api. When I run sample program I am getting below error

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/logging/log4j/Logger
    at org.elasticsearch.common.logging.Loggers.getLogger(Loggers.java:101)
    at org.elasticsearch.common.xcontent.support.AbstractXContentParser.<init>(AbstractXContentParser.java:57)
    at org.elasticsearch.common.xcontent.json.JsonXContentParser.<init>(JsonXContentParser.java:44)
    at org.elasticsearch.common.xcontent.json.JsonXContent.createParser(JsonXContent.java:103)
    at org.elasticsearch.common.settings.Setting.parseableStringToList(Setting.java:848)
    at org.elasticsearch.common.settings.Setting.lambda$listSetting$27(Setting.java:802)
    at org.elasticsearch.common.settings.Setting.listSetting(Setting.java:807)
    at org.elasticsearch.common.settings.Setting.listSetting(Setting.java:802)
    at org.elasticsearch.common.network.NetworkService.<clinit>(NetworkService.java:50)
    at org.elasticsearch.client.transport.TransportClient.newPluginService(TransportClient.java:98)
    at org.elasticsearch.client.transport.TransportClient.buildTemplate(TransportClient.java:126)
    at org.elasticsearch.client.transport.TransportClient.<init>(TransportClient.java:268)
    at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:125)
    at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:111)
    at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:101)
    at com.ibm.esclient.ESClient.main(ESClient.java:33)
Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.Logger
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

My dependencies are

<dependencies>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>5.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.8</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.8
            </version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.8</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-web</artifactId>
            <version>2.8</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-to-slf4j</artifactId>
            <version>2.8</version>
        </dependency>
        <dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.7</version>
</dependency>
    </dependencies>

Basically I have tried to add all possible log4j loggers here but to no avail. Quite frustrating, need help please!!

Upvotes: 0

Views: 2158

Answers (2)

Dmitri Korobtsov
Dmitri Korobtsov

Reputation: 417

Just in case - if logging was configured properly and problem only occurs after adding ES dependency would not it be easier solution to just add exclusion for ES log4j dependency (instead of adding more loggers)?

In gradle it's something like:

compile ('org.elasticsearch.client:elasticsearch-rest-high-level-client:6.2.2'){
    exclude group: 'org.apache.logging.log4j'
}

Solves NoClassDefFoundError exceptions just fine.

Upvotes: 0

Shades88
Shades88

Reputation: 8360

A small mistake led to this error. I had specified as test. I removed it and this started working

Upvotes: 2

Related Questions