【问题标题】:log4j and log4j-overslf4j both in classpath conflicts in LogManagerLogManager 中的类路径冲突中的 log4j 和 log4j-overslf4j
【发布时间】:2016-12-28 13:54:10
【问题描述】:

我们使用log4j-over-slf4j 登录我们的应用程序。但是我们的应用程序中的一个 jar 依赖项(我们外部)需要 log4j 特定的类(org.apache.log4j.spi.RepositorySelector)。所以,我也在我们的类路径中添加了 log4j,它能够找到那个类, 但是,然后我开始面临新问题,在我的代码中,我正在从 LogManager 加载 RepositorySelector, LogManager.setRepositorySelector(repoSel, guard); 现在,不是指特定于 log4j 的 LogManager,而是指特定于 log4j-over-slf4jLogManager,因此,我在 websphere 服务器控制台中遇到以下错误。

原因:java.lang.NoSuchMethodError: org/apache/log4j/LogManager.setRepositorySelector(Lorg/apache/log4j/spi/RepositorySelector;Ljava/lang/Object;)V**

请帮助我知道,我们怎样才能消除冲突,以便它能够引用正确的 log4j1.2.15 特定 LogManager。 而且,由于使用 log4j 的 jar 在我们的系统之外,我们对此没有太多控制权。

下面是完整的堆栈跟踪。

Caused by: java.lang.NoSuchMethodError: org/apache/log4j/LogManager.setRepositorySelector(Lorg/apache/log4j/spi/RepositorySelector;Ljava/lang/Object;)V
    at com.hsbc.es.logging.def.impl.log4j.Log4jLoggingTypeProvider.setContextualRepositorySelector(Log4jLoggingTypeProvider.java:117)
    at com.hsbc.es.logging.def.impl.log4j.Log4jLoggingTypeProvider.<clinit>(Log4jLoggingTypeProvider.java:97)
    at java.lang.J9VMInternals.newInstanceImpl(Native Method)
    at java.lang.Class.newInstance(Class.java:1887)
    at com.hsbc.es.logging.LoggingTypeManagerFactory.discoverContextLoggingTypeManagerSPI(LoggingTypeManagerFactory.java:168)
    at com.hsbc.es.logging.LoggingTypeManagerFactory.getContextLoggingTypeManagerSPI(LoggingTypeManagerFactory.java:98)
    at com.hsbc.es.logging.def.LoggingTypeProviderFactory.getContextLoggingTypeProvider(LoggingTypeProviderFactory.java:49)
    at com.hsbc.es.logging.def.LoggingTypeFactory.getDebugger(LoggingTypeFactory.java:58)

【问题讨论】:

  • 删除log4j.jar。如果您无法将 jar 修复为不依赖 Log4j SPI,则可能必须手动编写存根/代理,这样它就可以在没有 Log4j 的情况下运行。

标签: java apache maven logging


【解决方案1】:

您可以排除传递 log4j 依赖项被包含它的依赖项导入。

在您的 pom.xml 中,您可以告诉更新您的依赖项导入以排除 log4j:

<dependencies>
  <dependency>
    <groupId>the.group.id</groupId>
    <actifactId>the.artifact.id</artifactId>
    <version>version-SNAPSHOT</version>
    <exclusions>
      <exclusion>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
      </exclusion>
    </exclusions>
  </dependency>
</dependencies>

【讨论】:

    猜你喜欢
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 2016-11-11
    • 2014-11-29
    • 2011-10-10
    • 2020-11-06
    • 2014-07-23
    • 2023-03-21
    相关资源
    最近更新 更多