从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)
答案 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>