当前位置: 首页 > 知识库问答 >
问题:

JAVAlang.NoClassDefFoundError:org/apache/logging/log4j/Logger

华谭三
2023-03-14

我想在Elasticsearch中执行单元测试,因为我正在使用Java测试框架
我正在使用Elasticsearch-1.6.0,并参考这些链接获取帮助https://www.elastic.co/guide/en/elasticsearch/reference/1.6/using-elasticsearch-test-classes.html https://github.com/elastic/elasticsearch/blob/master/core/src/test/java/org/elasticsearch/action/search/SearchRequestBuilderTests.java

这是密码

class CampaignESTest extends ESTestCase {

  def getCLient():MockTransportClient={
     val settings = Settings.builder()
                .put(Environment.PATH_HOME_SETTING.getKey(), Files.createTempDir().toString())
                .build();
     val client = new MockTransportClient(settings);  
     client
  }
 }

class CampaignTestSearch extends PlaySpec{
  val client=new CampaignESTest

val response = client.prepareSearch("dbtest")
      .setTypes(CAMPAIGN_COLLECTION_NAME)
      .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
      .addFields("uuid","campaignName","artworkID","activationDate","_source")
      .setQuery(query)
      .execute()
      .actionGet()
  }

我得到了这个例外

  DeferredAbortedSuite:
[info] Exception encountered when attempting to run a suite with class name: org.scalatest.DeferredAbortedSuite *** ABORTED ***
[info]   java.lang.NoClassDefFoundError: org/apache/logging/log4j/Logger
[info]   at org.elasticsearch.common.logging.Loggers.getLogger(Loggers.java:101)
[info]   at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:92)
[info]   at org.elasticsearch.bootstrap.BootstrapForTesting.<clinit>(BootstrapForTesting.java:78)
[info]   at org.elasticsearch.test.ESTestCase.<clinit>(ESTestCase.java:138)
[info]   at testcontrollers.campaign.CampaignTestSerach.<init>(CampaignTestSerach.scala:40)
[info]   at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[info]   at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
[info]   at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
[info]   at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
[info]   at java.lang.Class.newInstance(Class.java:442)
[info]   ...
[info]   Cause: java.lang.ClassNotFoundException: org.apache.logging.log4j.Logger
[info]   at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
[info]   at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
[info]   at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
[info]   at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
[info]   at org.elasticsearch.common.logging.Loggers.getLogger(Loggers.java:101)
[info]   at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:92)
[info]   at org.elasticsearch.bootstrap.BootstrapForTesting.<clinit>(BootstrapForTesting.java:78)
[info]   at org.elasticsearch.test.ESTestCase.<clinit>(ESTestCase.java:138)
[info]   at testcontrollers.campaign.CampaignTestSerach.<init>(CampaignTestSerach.scala:40)
[info]   at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[info]   ...
[error] Uncaught exception when running testcontrollers.campaign.CampaignTestSerach: java.lang.NoClassDefFoundError: org/apache/logging/log4j/Logger

这一行有例外吗

val client=new CampaignESTest

在类活动测试搜索

以下是build中的依赖项。sbt文件

   "org.slf4j" % "slf4j-api" % "1.6.4",
                "org.elasticsearch" % "elasticsearch" % "1.6.0",
                "org.elasticsearch.test" % "framework" % "5.0.0" % "test",
                "org.apache.lucene" % "lucene-test-framework" % "4.10.4" % "test",
                "com.carrotsearch.randomizedtesting" % "randomizedtesting-runner" % "1.6.0" % "test",
                "org.apache.lucene" % "lucene-codecs" % "4.10.4" % "test",
                "org.apache.logging.log4j" % "log4j-core" % "2.8.2" ,
"org.apache.lucene" % "lucene-expressions" % "4.10.4",

我怀疑导致异常的原因可能是由于某些版本的依赖关系。任何人都可以帮助正确的库依赖关系版本使其正常工作,或者我缺少了其他什么吗

编辑删除测试从org.apache.logging.log4j%log4j-core%2.8.2更新build.sbt

"org.slf4j" % "slf4j-api" % "1.6.4",
                "org.elasticsearch" % "elasticsearch" % "1.6.0",
                "org.elasticsearch.test" % "framework" % "5.0.0" % "test",
                "org.apache.lucene" % "lucene-test-framework" % "4.10.4" % "test",
                "com.carrotsearch.randomizedtesting" % "randomizedtesting-runner" % "1.6.0" % "test",
                "org.apache.lucene" % "lucene-codecs" % "4.10.4" % "test",
                "org.apache.logging.log4j" % "log4j-core" % "2.8.2",
                "org.apache.logging.log4j" % "log4j-slf4j-impl" % "2.8.2" ,
                "org.apache.lucene" % "lucene-expressions" % "4.10.4",

共有2个答案

闾丘才哲
2023-03-14

引起:原因:java.lang.ClassNotFound异常:org.apache.logging.log4j。Logger错误表示,JVM无法找到org.apache.log4j。记录器类在您的项目或应用程序CLASSPATH.可能是错误的原因是丢失log4j.jar文件到您的项目或类路径.所以你需要使用以下依赖关系:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.25</version>
</dependency>

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
邵兴文
2023-03-14

要解决问题,请添加以下缺少的依赖项:

  • org.apache.logging.log4j: log4j-api: 2.8.2

除此之外,与问题没有直接关系,添加以下依赖项,以便您自己对slf4j api的调用也能直接指向log4j2实现:

  • org.apache.logging.log4j: log4j-slf4j-impl: 2.8.2

确保类路径上没有其他日志实现。

注意:我提出的“额外”建议是基于您希望将所有日志调用重定向到log4j,无论您是调用slf4j api还是直接调用log4j。如果没有,请说明您想要哪个日志实现,因为OP列出的Dependedencies也缺少一些内容。

 类似资料:
  • 我下面的自定义日志工具来实现日志功能的电子邮件使用log4j。 我已经将log4j:1.2.17的依赖项以及jar添加到类路径中。我正在尝试使用arquillian进行测试。但每次我都会犯同样的错误。 我知道它即将出现,因为我使用的是级别而不是优先级,而优先级现在已被弃用。我已经添加了正确的jar和导入,但是当我运行测试时仍然会出现错误。 我也提到了这些链接,但对我来说没有任何效果。 是什么导致了

  • 我正在尝试部署我的应用程序,但它给了我一个错误:未能实例化SLF4J LoggerFactory报告的异常: 我在Maven依赖区有罐子: weblogic中log4j jar的类路径: log4j。xml(来自类路径): 我错了什么?我无法想象。。。请帮帮我!谢谢

  • 问题内容: 我想在我正在使用的Elasticsearch中执行单元测试, 我正在使用 并参考以下链接以寻求帮助 https://www.elastic.co/guide/en/elasticsearch/reference/1.6/using- elasticsearch-test-classes .html https://github.com/elastic/elasticsearch/blo

  • https://logging.apache.org/log4j/2.x/maven-artifacts.html 我将它粘贴到我的文件中,并编写了运行代码的示例代码。 除此之外,我还添加了manifest以便从控制台运行代码。 最重要的是,有一点需要指出,虽然它不能与java-jar<.jar>一起工作,但出于某种原因,它仍然可以在Intellij IDEA中工作。有人能给我解释一下为什么吗?

  • 这是Spring应用程序中非常易于使用的Log4J功能。 下面的示例将指导您完成Log4J和Spring之间简单集成的简单步骤。 我们假设您的计算机上已经安装了log4J 。 如果你没有它,那么你可以从https://logging.apache.org/下载它,只需在任何文件夹中提取压缩文件。 我们将在项目中仅使用log4j-xyzjar 。 接下来,让我们使用一个可用的Eclipse IDE,

  • 我正在构建一个web应用程序,并使用ApachePOI处理excel工作表。当我启动服务器时,出现以下异常。问题是,在我尝试构建它并部署到heroku之前,它一直工作得很好(但可能与此无关)。有人有主意吗?? 我的pom。xml文件: 还有我的web.xml