【问题标题】:log4j:ERROR A "org.apache.log4j.ConsoleAppender" object is not assignable to a "org.apache.log4j.Appender" variablelog4j:错误“org.apache.log4j.ConsoleAppender”对象不可分配给“org.apache.log4j.Appender”变量
【发布时间】:2014-02-01 03:59:16
【问题描述】:

我正在使用 gradle 制作一个网络应用程序。我在这个应用程序中使用了 log4j。当我构建项目时出现错误...

  • log4j:ERROR “org.apache.log4j.ConsoleAppender”对象不可分配给“org.apache.log4j.Appender”变量。
  • log4j:ERROR 类“org.apache.log4j.Appender”被加载
  • log4j:ERROR [org.powermock.core.classloader.MockClassLoader@16a40b2] 而对象类型为
  • log4j:ERROR "org.apache.log4j.ConsoleAppender" 由 [sun.misc.Launcher$AppClassLoader@5e3a78ad] 加载。
  • log4j:ERROR 无法实例化名为“stdout”的附加程序。

我还是没有找到好的答案。我忘了说,我的项目正确构建并正确显示日志消息。它不仅适用于测试类。

【问题讨论】:

  • ConsoleAppender 类不知何故被 PowerMock 的类加载器加载,并且未正确链接到基本 Appender 类型。

标签: java exception logging log4j gradle


【解决方案1】:

添加此注释对我有用。

@PowerMockIgnore("org.apache.log4j.*") 

【讨论】:

  • 但是您正在压制这些错误消息而不是修复它们。
【解决方案2】:

有一个明确的答案here。 :D

当我们的类中有最终方法和 slf4j 记录器时。我们必须在我们的测试类中使用 powermock。因此,我们必须在使用 Powermock 的测试类中使用 @MockPolicy(Slf4jMockPolicy.class) 和特殊导入。

【讨论】:

  • OP 没有说他们正在使用 slf4j。 @ToYonos 发布的答案更合适。
【解决方案3】:

您的类路径包含 2 个 log4j 库副本。排除一个,然后重试。

【讨论】:

  • 我刚刚使用了 log4j-1.2.17 , slf4j-log4j12-1.7.5 和 slf4j-api-1.7.5。而 slf4j 是门面。
  • 如何查看我是否有2份?以及如何解决?我应该删除一个吗?
  • @YestayMuratov 通过分析您的类路径,这取决于您的应用程序的类型:要么是部署到应用程序服务器的 Web 应用程序,要么是任何类型的桌面/控制台应用程序。您必须删除一个,但这取决于这些库的兼容性。由于语义版本控制,如果这些库的主要版本不同,您的代码可能与从外部进入您的类路径的库版本不兼容。
猜你喜欢
  • 1970-01-01
  • 2021-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-04
  • 2012-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多