2014-10-20 12 views
7

Ho aggiunto Log4J2 alla mia applicazione. Ho copiato tutti i file .jar Log4J2 nella directory LIB e ho creato il file Log4J2.xml per supportarlo. Il mio codice è stato aggiornato per importare le necessarie Log Manager e Logger API. Ho quindi aggiunto il metodo del logger finale statico e ho chiamato l'apis del logger nel mio codice. Tutto il file compilato in Eclipse. Procedo ad avviare il mio server sul mio computer DEV per convalidarlo. All'avvio del mio server ho ricevuto il seguente errore: `NoClassDefFoundError: org/slf4j/Logger

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)` 

Cosa c'è di sbagliato nella mia configurazione? Devo scaricare un altro .JAR o si tratta di un problema di configurazione?

Grazie, Stephen.

Ho copiato slf4j .jars sul mio lib e ha riattivato il server. Sono comparsi i seguenti errori. Qualche idea sul perché questi errori vengono lanciati ora?

.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) 
+0

Ora si dispone di una dipendenza circolare nella configurazione SLF4J ... –

risposta

17

La risposta è nascosta nella pagina manual:

Use of the Log4j 2 SLF4J Binding (log4j-slf4j-impl-2.0.jar) together with the SLF4J adapter (log4j-to-slf4j-2.0.jar) should never be attempted, as it will cause events to endlessly be routed between SLF4J and Log4j 2.

Si vuole mantenere il log4j-slf4j -impl-2.xx.jar e rimuovere il file log4j-to-slf4j-2.xx.jar.

+0

Ho estratto il log4j zip da Apache ed entrambi erano nella cartella ... ovviamente era destinato a sbagliare. ;) Grazie per avermi risparmiato un sacco di tempo e frustrazione. – FDM

1

Sì. hai bisogno del file jar SLF4J. È possibile scaricarlo a: http://www.slf4j.org/download.html

+0

Ho aggiunto questi file e ora ricevo un nuovo errore all'avvio del server. Qualche idea su cosa potrebbe causarlo? –

+0

Qual è l'errore? Forse aggiorna la domanda? – triggerNZ

0

A NoClassDefFoundError con ClassNotFoundException specifica che la particolare classe manca durante il runtime.

È necessario fornire uno dei vari SLF4J implementazione file .jar nel classpath

Problemi correlati