当我在maven(m2e)中使用logback时,出现以下错误。环境:JBOSS 7.1.1,maven,eclipse。但如果我只是作为主类单独运行,它就可以正常工作。我无法弄清楚为什么会出现此错误,任何人都可以帮助我解决此问题并找到解决方案。
17:24:23,675 ERROR [stderr] java.lang.ClassCastException: org.slf4j.helpers.NOPLoggerFactory cannot be cast to ch.qos.logback.classic.LoggerContext
17:24:23,681 ERROR [stderr] at com.zreflect.emyed.whiteboard.pubsub.EventLoggerAsync.logStart(EventLoggerAsync.java:116)
17:24:23,683 ERROR [stderr] at com.zreflect.emyed.whiteboard.pubsub.EventLoggerAsync.onDisconnect(EventLoggerAsync.java:62)
17:24:23,684 ERROR [stderr] at org.atmosphere.cpr.AtmosphereResourceImpl.onDisconnect(AtmosphereResourceImpl.java:817)
17:24:23,686 ERROR [stderr] at org.atmosphere.cpr.AtmosphereResourceImpl.notifyListeners(AtmosphereResourceImpl.java:761)
17:24:23,688 ERROR [stderr] at org.atmosphere.cpr.AtmosphereResourceImpl.notifyListeners(AtmosphereResourceImpl.java:742)
17:24:23,690 ERROR [stderr] at org.atmosphere.cpr.AsynchronousProcessor.cancelled(AsynchronousProcessor.java:601)
17:24:23,691 ERROR [stderr] at org.atmosphere.container.BlockingIOCometSupport.cancelled(BlockingIOCometSupport.java:172)
17:24:23,693 ERROR [stderr] at org.atmosphere.cpr.AsynchronousProcessor$1.run(AsynchronousProcessor.java:119)
17:24:23,694 ERROR [stderr] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
17:24:23,696 ERROR [stderr] at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
17:24:23,698 ERROR [stderr] at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
17:24:23,699 ERROR [stderr] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
17:24:23,703 ERROR [stderr] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180)
17:24:23,707 ERROR [stderr] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204)
17:24:23,715 ERROR [stderr] at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
17:24:23,716 ERROR [stderr] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
17:24:23,718 ERROR [stderr] at java.lang.Thread.run(Thread.java:662)
该错误表明
com.zreflect.emyed.whiteboard.pubsub.EventLoggerAsync
类期望得到 ch.qos.logback.classic.LoggerContext
,但它获得了 org.slf4j.helpers.NOPLoggerFactory
。当某些代码尝试转换 org.slf4j.LoggerFactory.getILoggerFactory
的返回值并且 slf4j 绑定到 NOP 实现时,通常会发生这种情况,因为类路径上没有可用的 slf4j 绑定。这通常伴随着无法加载类或找不到 SLF4J 提供者错误消息。
请阅读 SLF4J 手册中的 Hello world 示例,它将解释 SLF4J 背后的总体思路。
仅供参考,如果有帮助的话,我也遇到了同样的问题:
java.lang.ClassCastException: class org.slf4j.helpers.NOPLoggerFactory cannot be cast to class ch.qos.logback.classic.LoggerContext
使用 SLF4J 2.0.3(logback 1.3.4)时使用 JBoss Wildfly 7.4,这是由于 https://jira.qos.ch/browse/SLF4J-548 以及使用了错误的类加载器。 更新到 SLF4J 2.0.4 解决了这个 NOPLogger 问题