Java log4j:错误A";org.apache.log4j.ConsoleAppender“;对象不可分配给;org.apache.log4j.Appender“;变量

Java log4j:错误A";org.apache.log4j.ConsoleAppender“;对象不可分配给;org.apache.log4j.Appender“;变量,java,exception,logging,log4j,gradle,Java,Exception,Logging,Log4j,Gradle,我正在使用gradle制作一个web应用程序。我在这个应用程序中使用了log4j。当我建立项目时,我得到了错误 log4j:错误“org.apache.log4j.ConsoleAppender”对象不能分配给“org.apache.log4j.Appender”变量 log4j:错误类“org.apache.log4j.Appender”是由 log4j:错误[org.powermock.core.classloader]。MockClassLoader@16a40b2]而类型为 log4j

我正在使用gradle制作一个web应用程序。我在这个应用程序中使用了log4j。当我建立项目时,我得到了错误

  • log4j:错误“org.apache.log4j.ConsoleAppender”对象不能分配给“org.apache.log4j.Appender”变量
  • log4j:错误类“org.apache.log4j.Appender”是由
  • log4j:错误[org.powermock.core.classloader]。MockClassLoader@16a40b2]而类型为
  • log4j:[sun.misc.Launcher]加载了错误“org.apache.log4j.ConsoleAppender”$AppClassLoader@5e3a78ad]
  • log4j:错误无法实例化名为“stdout”的appender

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

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

有一个明确的答案:D


当我们的类中有了最后一个方法和slf4j记录器时。我们必须在测试类中使用powermock。因此,我们必须在使用Powermock的测试类中将@MockPolicy(Slf4jMockPolicy.class)与particuler导入一起使用

添加此注释对我很有用

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

ConsoleAppender
类不知何故被来自PowerMock的类加载器加载,并且没有正确链接到基本的
Appender
类型。我刚刚使用了log4j-1.2.17、slf4j-log4j12-1.7.5和slf4j-api-1.7.5。slf4j是门面。如何检查我是否有2份?如何修复?我应该删除一个吗?@YestayMuratov通过分析类路径,它取决于应用程序的类型:部署到应用程序服务器的web应用程序,或任何类型的桌面/控制台应用程序。您必须删除一个,但这取决于这些库的兼容性。由于语义版本控制,如果这些库的主要版本不同,那么您的代码可能与从外部到达类路径的库版本不兼容。OP没有说它们正在使用slf4j。@ToYonos发布的答案更合适。但您正在抑制这些错误消息,而不是修复它们。