Elastic Search: java.lang.NoClassDefFoundError: Could not initialize class org.apache.log4j.LogManager

Elastic Search: java.lang.NoClassDefFoundError: Could not initialize class org.apache.log4j.LogManager

将弹性搜索从 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)

我在类路径中几乎没有 log4j jar 和 slf4j jar,但 Elastic search 尝试默认加载 log4j 记录器(如果它在类路径中可用)。对于某些冲突,log4j 对我不起作用。所以强制 Elasticsearch 在创建客户端时使用 slf4j 记录器。

ESLoggerFactory.setDefaultFactory(新 Slf4jESLoggerFactory());

我通过在 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>