【问题标题】:NoClassDefFoundError: org/slf4j/LoggerNoClassDefFoundError: org/slf4j/Logger
【发布时间】:2014-12-15 00:45:18
【问题描述】:

我将 Log4J2 添加到我的应用程序中。我将所有 Log4J2 .jar 文件复制到 LIB 目录并创建了 Log4J2.xml 文件来支持它。我的代码已更新以导入必要的 Log Manager 和 Logger API。然后我添加了静态最终记录器方法并在我的代码中调用记录器 API。 Eclipse 中的所有编译文件。我继续在我的 DEV 机器上启动我的服务器来验证它。启动服务器后,我收到以下错误:`

2014-10-19 21:39:31.753:INFO:oejs.Server:jetty-8.1.14.v20131031
2014-10-19 21:39:32.680:WARN:oejuc.AbstractLifeCycle:FAILED FoundationStartup: java.lang.NoClassDefFoundError: org/slf4j/Logger
java.lang.NoClassDefFoundError: org/slf4j/Logger
    at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:41)
    at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:474)
    at com.global.service.FoundationStartup.<clinit>(FoundationStartup.java:19)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at java.lang.Class.newInstance0(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at org.eclipse.jetty.servlet.ServletContextHandler$Context.createServlet(ServletContextHandler.java:1075)
    at org.eclipse.jetty.servlet.ServletHolder.newInstance(ServletHolder.java:957)
    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:514)
    at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:344)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:791)
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265)
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1221)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:717)
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:454)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
    at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:229)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
    at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95)
    at org.eclipse.jetty.server.Server.doStart(Server.java:282)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
    at org.eclipse.wst.server.preview.internal.PreviewStarter.run(PreviewStarter.java:72)
    at org.eclipse.wst.server.preview.internal.PreviewStarter.main(PreviewStarter.java:29)
Caused by: 
java.lang.ClassNotFoundException: org.slf4j.Logger
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:424)
    at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:377)
    at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:41)
    at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:474)
    at com.global.service.FoundationStartup.<clinit>(FoundationStartup.java:19)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at java.lang.Class.newInstance0(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at org.eclipse.jetty.servlet.ServletContextHandler$Context.createServlet(ServletContextHandler.java:1075)
    at org.eclipse.jetty.servlet.ServletHolder.newInstance(ServletHolder.java:957)
    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:514)
    at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:344)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:791)
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265)
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1221)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:717)
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:454)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
    at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:229)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
    at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95)
    at org.eclipse.jetty.server.Server.doStart(Server.java:282)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
    at org.eclipse.wst.server.preview.internal.PreviewStarter.run(PreviewStarter.java:72)
    at org.eclipse.wst.server.preview.internal.PreviewStarter.main(PreviewStarter.java:29)`

我的配置有什么问题?我需要下载另一个 .JAR 还是这是配置问题?

谢谢, 斯蒂芬。

我将 slf4j .jar 复制到我的库并重新运行服务器。出现以下错误。任何想法为什么现在抛出这些错误?

.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:41)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:51)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:277)
    at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:41)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:51)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:277)
    at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:41)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:51)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:277)
    at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:41)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:51)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:277)
    at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:41)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:51)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:277)
    at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:41)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:51)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:277)
    at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:41)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:51)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:277)
    at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:41)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:51)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:277)
    at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:41)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:51)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:277)
    at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:41)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:51)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:277)
    at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:41)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:51)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:277)
    at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:41)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:51)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:277)
    at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:41)

【问题讨论】:

  • 现在你的 SLF4J 配置中有一个循环依赖...

标签: java logging log4j slf4j log4j2


【解决方案1】:

答案隐藏在manual页面中:

同时使用 Log4j 2 SLF4J Binding (log4j-slf4j-impl-2.0.jar) 永远不要使用 SLF4J 适配器 (log4j-to-slf4j-2.0.jar) 尝试,因为它会导致事件在 SLF4J 和 Log4j 2.

您想保留 log4j-slf4j-impl-2.xx.jar 并删除 log4j-to-slf4j-2.xx.jar。 p>

【讨论】:

  • 我从 Apache 中提取了 Log4j zip 并且两者都在文件夹中......当然这肯定会出错。 ;) 感谢您为我节省了大量时间和挫败感。
【解决方案2】:

是的。你需要 SLF4J jar 文件。下载地址:http://www.slf4j.org/download.html

【讨论】:

  • 我添加了这些文件,现在在启动服务器时收到一个新错误。知道是什么原因造成的吗?
【解决方案3】:

带有ClassNotFoundExceptionNoClassDefFoundError 指定特定类在运行时丢失。

您必须在类路径中提供各种 SLF4J 实现 .jar 文件之一

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-12
    • 2011-04-13
    • 2015-11-30
    • 1970-01-01
    • 2010-12-13
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多