0

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!!

2
  • Some of those dependencies are outdated. For instance logback-classic is at version 1.2.3. Commented May 25, 2017 at 12:47
  • I tried your suggestion. Still the same! Commented May 25, 2017 at 13:27

2 Answers 2

2

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

Sign up to request clarification or add additional context in comments.

Comments

0

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.