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 <luca.leonardi1...@gmail.com>
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
>

Reply via email to