I think it should work fine with JNDI feature in early stage or JNDI feature as startup feature.
Regards JB On 09/04/2019 13:30, Grzegorz Grzybek wrote: > Hello > > I spotted this problem too. > > When you have Karaf running and update logging configuration (when JNDI DS > is already available), then everything works (checked). > But when you restart Karaf, pax-logging-log4j2 starts so early (in terms of > start-level and how Felix/Karaf starts) that there's no way that data > source (and even JNDI infra) could be available. > > My idea is to create lazy version of log4j2's > `org.apache.logging.log4j.core.appender.db.jdbc.ConnectionSource` that > doesn't fail when JNDI/DS isn't available yet... But honestly, I didn't yet > have much time to work on this. > > regards > Grzegorz Grzybek > > wt., 9 kwi 2019 o 12:41 leonardchicco <[email protected]> > napisał(a): > >> Hi all, >> I have a boring problem when I start karaf using custom logging appender >> Follow the section of my "org.ops4j.pax.logging.cfg" >> >> ================================================================ >> # HSQLDB Appender for connectors logs >> log4j2.rootLogger.appenderRef.DBAppender.ref = DBAppender >> log4j2.appender.jdbc.type = jdbc >> log4j2.appender.jdbc.name = DBAppender >> log4j2.appender.jdbc.tableName = CONNECTORS_LOG >> log4j2.appender.jdbc.c1.type=Column >> log4j2.appender.jdbc.c1.name=EVENT_DATE >> log4j2.appender.jdbc.c1.isEventTimestamp = true >> log4j2.appender.jdbc.c2.type = Column >> log4j2.appender.jdbc.c2.name = LOGGER >> log4j2.appender.jdbc.c2.pattern = %logger >> log4j2.appender.jdbc.c2.isUnicode = false >> log4j2.appender.jdbc.c3.type = Column >> log4j2.appender.jdbc.c3.name = LEVEL >> log4j2.appender.jdbc.c3.pattern = %level >> log4j2.appender.jdbc.c3.isUnicode = false >> log4j2.appender.jdbc.c4.type = Column >> log4j2.appender.jdbc.c4.name = MESSAGE >> log4j2.appender.jdbc.c4.pattern = %message >> log4j2.appender.jdbc.c4.isUnicode = false >> log4j2.appender.jdbc.c5.type = Column >> log4j2.appender.jdbc.c5.name = THROWABLE >> log4j2.appender.jdbc.c5.pattern = %ex{full} >> log4j2.appender.jdbc.c5.isUnicode = false >> log4j2.appender.jdbc.c6.type = Column >> log4j2.appender.jdbc.c6.name = CLASS >> log4j2.appender.jdbc.c6.pattern = %class{1.} >> log4j2.appender.jdbc.c6.isUnicode = false >> log4j2.appender.jdbc.c7.type = Column >> log4j2.appender.jdbc.c7.name = THREAD >> log4j2.appender.jdbc.c7.pattern = %thread >> log4j2.appender.jdbc.c7.isUnicode = false >> log4j2.appender.jdbc.datasource.type = DataSource >> log4j2.appender.jdbc.datasource.jndiName = osgi:service/connectors_log_ds >> log4j2.appender.jdbc.filter.f1.type = MarkerFilter >> log4j2.appender.jdbc.filter.f1.onMismatch = DENY >> log4j2.appender.jdbc.filter.f1.onMatch = ACCEPT >> log4j2.appender.jdbc.filter.f1.marker = DB_MARKER >> ================================================================ >> >> And following the error trace that's repeated more times >> >> >> >> 2019-04-09 11:26:39,574 CM Configuration Updater (Update: >> pid=org.ops4j.pax.logging) ERROR Need to specify class name in environment >> or system property, or as an applet parameter, or in an application >> resource >> file: java.naming.factory.initial javax.naming.NoInitialContextException: >> Need to specify class name in environment or system property, or as an >> applet parameter, or in an application resource file: >> java.naming.factory.initial >> at >> javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662) >> at >> javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313) >> at >> javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:350) >> at javax.naming.InitialContext.lookup(InitialContext.java:417) >> at >> >> org.apache.logging.log4j.core.appender.db.jdbc.DataSourceConnectionSource.createConnectionSource(DataSourceConnectionSource.java:75) >> 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.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:132) >> at >> >> org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:952) >> at >> >> org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:892) >> at >> >> org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:884) >> at >> >> org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:884) >> at >> >> org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:508) >> at >> >> org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:232) >> at >> >> org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:244) >> at >> >> org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:545) >> at >> org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:261) >> at >> >> org.ops4j.pax.logging.log4j2.internal.PaxLoggingServiceImpl.doUpdate(PaxLoggingServiceImpl.java:213) >> at >> >> org.ops4j.pax.logging.log4j2.internal.PaxLoggingServiceImpl.updated(PaxLoggingServiceImpl.java:158) >> at >> >> org.ops4j.pax.logging.log4j2.internal.PaxLoggingServiceImpl$1ManagedPaxLoggingService.updated(PaxLoggingServiceImpl.java:426) >> at >> >> org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189) >> at >> >> org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) >> at >> >> org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) >> at >> >> org.apache.felix.cm.impl.ConfigurationManager$UpdateConfiguration.run(ConfigurationManager.java:1400) >> at >> org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:138) >> at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:105) >> at java.lang.Thread.run(Thread.java:748) >> >> 2019-04-09 11:26:39,584 CM Configuration Updater (Update: >> pid=org.ops4j.pax.logging) ERROR No ConnectionSource provided: >> connectionSource >> 2019-04-09 11:26:39,594 CM Configuration Updater (Update: >> pid=org.ops4j.pax.logging) ERROR Unable to inject fields into builder class >> for plugin type class >> org.apache.logging.log4j.core.appender.db.jdbc.JdbcAppender, element jdbc. >> org.apache.logging.log4j.core.config.ConfigurationException: Arguments >> given >> for element jdbc are invalid >> at >> >> org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.injectFields(PluginBuilder.java:198) >> at >> >> org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:121) >> at >> >> org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:952) >> at >> >> org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:892) >> at >> >> org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:884) >> at >> >> org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:508) >> at >> >> org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:232) >> at >> >> org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:244) >> at >> >> org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:545) >> at >> org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:261) >> at >> >> org.ops4j.pax.logging.log4j2.internal.PaxLoggingServiceImpl.doUpdate(PaxLoggingServiceImpl.java:213) >> at >> >> org.ops4j.pax.logging.log4j2.internal.PaxLoggingServiceImpl.updated(PaxLoggingServiceImpl.java:158) >> at >> >> org.ops4j.pax.logging.log4j2.internal.PaxLoggingServiceImpl$1ManagedPaxLoggingService.updated(PaxLoggingServiceImpl.java:426) >> at >> >> org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189) >> at >> >> org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) >> at >> >> org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) >> at >> >> org.apache.felix.cm.impl.ConfigurationManager$UpdateConfiguration.run(ConfigurationManager.java:1400) >> at >> org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:138) >> at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:105) >> at java.lang.Thread.run(Thread.java:748) >> >> 2019-04-09 11:26:39,594 CM Configuration Updater (Update: >> pid=org.ops4j.pax.logging) ERROR Unable to invoke factory method in class >> class org.apache.logging.log4j.core.appender.db.jdbc.JdbcAppender for >> element jdbc. java.lang.IllegalStateException: No factory method found for >> class org.apache.logging.log4j.core.appender.db.jdbc.JdbcAppender >> at >> >> org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.findFactoryMethod(PluginBuilder.java:224) >> at >> >> org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:130) >> at >> >> org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:952) >> at >> >> org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:892) >> at >> >> org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:884) >> at >> >> org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:508) >> at >> >> org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:232) >> at >> >> org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:244) >> at >> >> org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:545) >> at >> org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:261) >> at >> >> org.ops4j.pax.logging.log4j2.internal.PaxLoggingServiceImpl.doUpdate(PaxLoggingServiceImpl.java:213) >> at >> >> org.ops4j.pax.logging.log4j2.internal.PaxLoggingServiceImpl.updated(PaxLoggingServiceImpl.java:158) >> at >> >> org.ops4j.pax.logging.log4j2.internal.PaxLoggingServiceImpl$1ManagedPaxLoggingService.updated(PaxLoggingServiceImpl.java:426) >> at >> >> org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189) >> at >> >> org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) >> at >> >> org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) >> at >> >> org.apache.felix.cm.impl.ConfigurationManager$UpdateConfiguration.run(ConfigurationManager.java:1400) >> at >> org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:138) >> at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:105) >> at java.lang.Thread.run(Thread.java:748) >> >> >> >> I think the datasource is not instantiated at startup. >> >> Can you help me to resolve this problem? >> >> Thanks in advance >> >> >> >> >> >> >> >> >> -- >> Sent from: http://karaf.922171.n3.nabble.com/Karaf-Dev-f930721.html >> > -- Jean-Baptiste Onofré [email protected] http://blog.nanthrax.net Talend - http://www.talend.com
