弹性搜索:java.lang.NoClassDefFoundError:无法初始化类org.apache.log4j.LogManager

时间:2016-06-16 16:55:00

标签: elasticsearch log4j slf4j

从1.7升级到2.3.3升级弹性搜索时出现以下错误

java.lang.NoClassDefFoundError: Could not initialize class org.apache.log4j.LogManager
        at org.apache.log4j.Logger.getLogger(Logger.java:104)
        at org.elasticsearch.common.logging.log4j.Log4jESLoggerFactory.newInstance(Log4jESLoggerFactory.java:38)
        at org.elasticsearch.common.logging.ESLoggerFactory.newInstance(ESLoggerFactory.java:82)
        at org.elasticsearch.common.logging.ESLoggerFactory.getLogger(ESLoggerFactory.java:66)
        at org.elasticsearch.common.logging.Loggers.getLogger(Loggers.java:121)
        at org.elasticsearch.common.settings.Settings.<clinit>(Settings.java:63)

2 个答案:

答案 0 :(得分:0)

我在classpath中只有几个log4j jar和slf4j jar,但是如果在classpath中可用,Elastic搜索会尝试默认加载log4j logger。对于某些冲突,log4j对我不起作用。因此强制Elasticsearch在创建客户端时使用slf4j logger。

ESLoggerFactory.setDefaultFactory(new Slf4jESLoggerFactory());

答案 1 :(得分:0)

我通过在POM.XML中添加以下依赖来解决了同样的问题:

<dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.6.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.6.2</version>
    </dependency>