Reputation: 101
I have an OSGi Application that uses log4j 2.17.1, slf4j-api-2.0.3.jar, and slf4j-reload4j-2.0.3.jar. The web server is running Tomcat 8.0.53. I'm getting this log4j2 error in the debug log when starting the application, and I'm not getting any logs although the application is running.
DEBUG StatusLogger Not in a ServletContext environment, thus not loading WebLookup plugin.
DEBUG StatusLogger Unable to retrieve WatchEventService from ClassLoader org.company.dao.webcontainer.tomcat.WebAppClassLoader@140c9f39
java.lang.NullPointerException
at java.util.ServiceLoader$LazyIterator.hasNextService(ServiceLoader.java:354)
at java.util.ServiceLoader$LazyIterator.hasNext(ServiceLoader.java:393)
at java.util.ServiceLoader$1.hasNext(ServiceLoader.java:474)
at org.apache.logging.log4j.core.util.WatchManager.getEventServices(WatchManager.java:164)
at org.apache.logging.log4j.core.util.WatchManager.<init>(WatchManager.java:137)
at org.apache.logging.log4j.core.config.AbstractConfiguration.<init>(AbstractConfiguration.java:140)
at org.apache.logging.log4j.core.config.DefaultConfiguration.<init>(DefaultConfiguration.java:46)
at org.apache.logging.log4j.core.LoggerContext.<init>(LoggerContext.java:95)
at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.createContext(ClassLoaderContextSelector.java:254)
at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.locateContext(ClassLoaderContextSelector.java:218)
at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:140)
at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:123)
at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:117)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:150)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:47)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:309)
at org.apache.log4j.LogManager$PrivateManager.getContext(LogManager.java:244)
at org.apache.log4j.LogManager.getRootLogger(LogManager.java:89)
at org.slf4j.reload4j.Reload4jLoggerFactory.<init>(Reload4jLoggerFactory.java:66)
at org.slf4j.reload4j.Reload4jServiceProvider.initialize(Reload4jServiceProvider.java:35)
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:152)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:139)
at org.slf4j.LoggerFactory.getProvider(LoggerFactory.java:422)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:408)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.cxf.common.logging.LogUtils.<clinit>(LogUtils.java:103)
at org.apache.cxf.configuration.spring.AbstractBeanDefinitionParser.<clinit>(AbstractBeanDefinitionParser.java:65)
at org.apache.cxf.jaxrs.spring.NamespaceHandler.init(NamespaceHandler.java:27)
at org.springframework.beans.factory.xml.DefaultNamespaceHandlerResolver.resolve(DefaultNamespaceHandlerResolver.java:131)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1406)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1401)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:168)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:138)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:94)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:508)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:392)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:609)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:510)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4900)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5363)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:755)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:731)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
at org.company.dao.webcontainer.tomcat.TomcatWrapper.startWebApp(TomcatWrapper.java:187)
at org.company.dao.webcontainer.tomcat.TomcatWrapper.prepareAllWebApps(TomcatWrapper.java:141)
at org.company.dao.webcontainer.tomcat.TomcatWrapper.startServer(TomcatWrapper.java:208)
at org.company.dao.webcontainer.tomcat.Application.start(Application.java:30)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603)
at org.eclipse.equinox.launcher.Main.run(Main.java:1465)
at org.eclipse.equinox.launcher.Main.main(Main.java:1438)
I have org.apache.logging.log4j.core.util in the 'Export-Package' of the MANIFEST.MF file. Am I missing anything?
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Dao Logging
Bundle-SymbolicName: org.company.dao.logging;singleton:=true
Bundle-Version: 1.0.0
Bundle-Activator: org.company.dao.logging.Activator
Require-Bundle: org.eclipse.core.runtime
Bundle-ActivationPolicy: lazy
Bundle-ClassPath: bin/,
lib/slf4j-api-2.0.3.jar,
lib/log4j-slf4j-impl-2.17.1.jar,
lib/log4j-1.2-api-2.17.1.jar,
lib/log4j-api-2.17.1.jar,
lib/log4j-core-2.17.1.jar,
lib/commons-logging-1.2.jar
Export-Package: org.apache.commons.logging,
org.apache.commons.logging.impl,
org.apache.log4j,
org.apache.log4j.bridge,
org.apache.log4j.builders,
org.apache.log4j.builders.appender,
org.apache.log4j.builders.filter,
org.apache.log4j.builders.layout,
org.apache.log4j.builders.rewrite,
org.apache.log4j.builders.rolling,
org.apache.log4j.component.helpers,
org.apache.log4j.config,
org.apache.log4j.helpers,
org.apache.log4j.jmx,
org.apache.log4j.layout,
org.apache.log4j.legacy.core,
org.apache.log4j.or,
org.apache.log4j.or.jms,
org.apache.log4j.pattern,
org.apache.log4j.rewrite,
org.apache.log4j.spi,
org.apache.log4j.varia,
org.apache.log4j.xml,
org.apache.logging.log4j,
org.apache.logging.log4j.core,
org.apache.logging.log4j.core.appender,
org.apache.logging.log4j.core.appender.db,
org.apache.logging.log4j.core.appender.db.jdbc,
org.apache.logging.log4j.core.appender.mom,
org.apache.logging.log4j.core.appender.mom.jeromq,
org.apache.logging.log4j.core.appender.mom.kafka,
org.apache.logging.log4j.core.appender.nosql,
org.apache.logging.log4j.core.appender.rewrite,
org.apache.logging.log4j.core.appender.rolling,
org.apache.logging.log4j.core.appender.rolling.action,
org.apache.logging.log4j.core.appender.routing,
org.apache.logging.log4j.core.async,
org.apache.logging.log4j.core.config,
org.apache.logging.log4j.core.config.arbiters,
org.apache.logging.log4j.core.config.builder.api,
org.apache.logging.log4j.core.config.builder.impl,
org.apache.logging.log4j.core.config.composite,
org.apache.logging.log4j.core.config.json,
org.apache.logging.log4j.core.config.plugins,
org.apache.logging.log4j.core.config.plugins.convert,
org.apache.logging.log4j.core.config.plugins.processor,
org.apache.logging.log4j.core.config.plugins.util,
org.apache.logging.log4j.core.config.plugins.validation,
org.apache.logging.log4j.core.config.plugins.validation.constraints,
org.apache.logging.log4j.core.config.plugins.validation.validators,
org.apache.logging.log4j.core.config.plugins.visitors,
org.apache.logging.log4j.core.config.properties,
org.apache.logging.log4j.core.config.status,
org.apache.logging.log4j.core.config.xml,
org.apache.logging.log4j.core.config.yaml,
org.apache.logging.log4j.core.filter,
org.apache.logging.log4j.core.impl,
org.apache.logging.log4j.core.jackson,
org.apache.logging.log4j.core.jmx,
org.apache.logging.log4j.core.layout,
org.apache.logging.log4j.core.layout.internal,
org.apache.logging.log4j.core.lookup,
org.apache.logging.log4j.core.message,
org.apache.logging.log4j.core.net,
org.apache.logging.log4j.core.net.ssl,
org.apache.logging.log4j.core.osgi,
org.apache.logging.log4j.core.parser,
org.apache.logging.log4j.core.pattern,
org.apache.logging.log4j.core.script,
org.apache.logging.log4j.core.selector,
org.apache.logging.log4j.core.time,
org.apache.logging.log4j.core.time.internal,
org.apache.logging.log4j.core.tools,
org.apache.logging.log4j.core.tools.picocli,
org.apache.logging.log4j.core.util,
org.apache.logging.log4j.core.util.datetime,
org.apache.logging.log4j.internal,
org.apache.logging.log4j.message,
org.apache.logging.log4j.simple,
org.apache.logging.log4j.spi,
org.apache.logging.log4j.status,
org.apache.logging.log4j.util,
org.apache.logging.slf4j,
org.slf4j,
org.slf4j.event,
org.slf4j.helpers,
org.slf4j.impl,
org.slf4j.spi
edit Updating log4j to 2.19.0 cleared the error but I'm getting messages like this now
SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.
SLF4J: Class path contains SLF4J bindings targeting slf4j-api versions 1.7.x or earlier.
SLF4J: Ignoring binding found at [bundleresource://8.fwk600746945:2/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See https://www.slf4j.org/codes.html#ignoredBindings for an explanation.
Here's all of the slf4j jars in my OSGi Bundle
root@8be4d7b90d60:/opt/core_server/default/plugins# find . -name "*slf4j*"
./com.company.platform.analytics.agent.model-2.0.0-SNAPSHOT/target/lib/slf4j-reload4j-2.0.3.jar
./com.company.platform.analytics.agent.model-2.0.0-SNAPSHOT/target/lib/slf4j-api-2.0.3.jar
./com.github.codegerm:org.cg.eventbus-1.0.9/target/lib/slf4j-reload4j-2.0.3.jar
./com.github.codegerm:org.cg.eventbus-1.0.9/target/lib/slf4j-api-2.0.3.jar
./com.company.platform.internal.agent-2.0.0-SNAPSHOT/target/lib/slf4j-reload4j-2.0.3.jar
./com.company.platform.internal.agent-2.0.0-SNAPSHOT/target/lib/slf4j-api-2.0.3.jar
./com.company.platform.data.common-2.0.0-SNAPSHOT/target/lib/slf4j-reload4j-2.0.3.jar
./com.company.platform.data.common-2.0.0-SNAPSHOT/target/lib/slf4j-api-2.0.3.jar
./com.github.codegerm:org.cg.services.core-1.0.12/target/lib/slf4j-reload4j-2.0.3.jar
./com.github.codegerm:org.cg.services.core-1.0.12/target/lib/slf4j-api-2.0.3.jar
./com.company.platform.configuration.management:com.company.platform.configuration.management-2.0.0-SNAPSHOT/target/lib/slf4j-reload4j-2.0.3.jar
./com.company.platform.configuration.management:com.company.platform.configuration.management-2.0.0-SNAPSHOT/target/lib/slf4j-api-2.0.3.jar
./org.cg.dao.logging_1.0.0/lib/log4j-slf4j-impl-2.19.0.jar
./org.cg.dao.logging_1.0.0/lib/slf4j-api-2.0.3.jar
./com.company.platform.ingestion-2.0.0-SNAPSHOT/target/lib/slf4j-reload4j-2.0.3.jar
./com.company.platform.ingestion-2.0.0-SNAPSHOT/target/lib/slf4j-api-2.0.3.jar
./com.company.platform.ingestion-2.0.0-SNAPSHOT/target/lib/jcl-over-slf4j-1.7.14.jar
./com.company.platform.security-2.0.0-SNAPSHOT/target/lib/slf4j-reload4j-2.0.3.jar
./com.company.platform.security-2.0.0-SNAPSHOT/target/lib/slf4j-api-2.0.3.jar
./com.company.platform.security-2.0.0-SNAPSHOT/target/lib/jcl-over-slf4j-1.7.14.jar
edit-2 Replacing log4j-slf4j-impl-2.19.0.jar with log4j-slf4j2-impl-2.19.0.jar fixed the "SLF4J: No SLF4J providers were found" issue.
Upvotes: 0
Views: 1256
Reputation: 101
Thanks to @Piotr!
I had to upgrade log4j to 2.19.0 then use log4j-slf4j2-impl instead of log4j-slf4j-impl to bind with slf4j 2.0.3.
All is good now!
Upvotes: 2