Re: PaxLogging: org.ops4j.pax.logging.log4jv2.Log4jv2LoggerContext cannot be cast to org.apache.logging.log4j.core.LoggerContext
Hello For log4j, there's https://github.com/ops4j/org.ops4j.pax.logging/blob/master/pax-logging-log4j2/src/main/java/org/ops4j/pax/logging/log4j2/appender/PaxOsgiAppender.java that does just that - uses in-memory buffer. It's registered as log4j plugin. I would so similar thing - register an appender as plugin AND as OSGi service (or have it referenced in other way) - so you won't have to retrieve it back from log4j2 internals. As for configuration - I still think it's better to configure it via configadmin. Otherwise you'd just have to reimplement pax-logging-log4j2 in a way that allows configuration using different method. regards Grzegorz Grzybek 2017-10-02 6:43 GMT+02:00 Asma Zinneera Jabir : > > The way I have configured Log4j2 is through the following entry in > pax-logging.properties. > > org.ops4j.pax.logging.log4j2.config.file=path/to/log4j2.properties > > So when I try: > > Hashtable log4jProps = new Hashtable(); > log4jProps.put( "appender.CONSOLE.layout.pattern", "[%d] %5p {%c} - > %m%ex%n" ); > configuration.update(log4jProps); > > This will add another entry into pax-logging.properties as > appender.CONSOLE.layout.pattern = [%d] %5p {%c} - %m%ex%n which makes all > the entries in pax-logging.properties invalid. > > To make my requirement clear, I have two things to do. > > 1. I have a Log4J2 custom memory appender in which writes log events to a > circular buffer. During the runtime, I need to display these logs in the > UI. For this, I should be able to get the memory appender form the log4j2 > context. > 2. I need to give an option to the user to reconfigure all the appenders > during runtime throught the UI. For this, I should be able to reconfigure > the specified properties of appenders programatically. > > > On Wednesday, August 9, 2017 at 9:00:12 PM UTC+5:30, Jérémie Brébec wrote: >> >> Hello, >> >> I am using pax-logging 1.10.1 through Karaf 4.1.2 ; >> >> I am trying to integrate the log generated by my ElasticSearch bundle to >> the pax-logging implementation. However, this didn't work because a >> ClassCastException. I haven't see any "duplicate classloader issues", and >> when I check the code, the ClassCastException doesn't feel to be >> osgi-related. Is it a known issue or I am missing something ? >> >> Regards, >> Jérémie >> >> java.lang.ClassCastException: >> org.ops4j.pax.logging.log4jv2.Log4jv2LoggerContext >> cannot be cast to org.apache.logging.log4j.core.LoggerContext >> at >> org.apache.logging.log4j.core.LoggerContext.getContext(LoggerContext.java:190) >> [6:org.ops4j.pax.logging.pax-logging-log4j2:1.10.1] >> at >> org.apache.logging.log4j.core.config.Configurator.setLevel(Configurator.java:291) >> [6:org.ops4j.pax.logging.pax-logging-log4j2:1.10.1] >> at >> org.elasticsearch.common.logging.Loggers.setLevel(Loggers.java:149) >> [88:features.boss.elasticsearch.bundle:5.5.0] >> at >> org.elasticsearch.common.logging.Loggers.setLevel(Loggers.java:144) >> [88:features.boss.elasticsearch.bundle:5.5.0] >> at >> org.elasticsearch.index.SearchSlowLog.setLevel(SearchSlowLog.java:111) >> [88:features.boss.elasticsearch.bundle:5.5.0] >> at >> org.elasticsearch.index.SearchSlowLog.(SearchSlowLog.java:106) >> [88:features.boss.elasticsearch.bundle:5.5.0] >> at org.elasticsearch.index.IndexModule.(IndexModule.java:127) >> [88:features.boss.elasticsearch.bundle:5.5.0] >> at >> org.elasticsearch.indices.IndicesService.createIndexService(IndicesService.java:441) >> [88:features.boss.elasticsearch.bundle:5.5.0] >> at >> org.elasticsearch.indices.IndicesService.createIndex(IndicesService.java:414) >> [88:features.boss.elasticsearch.bundle:5.5.0] >> at org.elasticsearch.cluster.metadata.MetaDataIndexTemplateServ >> ice.validateAndAddTemplate(MetaDataIndexTemplateService.java:216) >> [88:features.boss.elasticsearch.bundle:5.5.0] >> at org.elasticsearch.cluster.metadata.MetaDataIndexTemplateServ >> ice.access$200(MetaDataIndexTemplateService.java:63) >> [88:features.boss.elasticsearch.bundle:5.5.0] >> at org.elasticsearch.cluster.metadata.MetaDataIndexTemplateServ >> ice$2.execute(MetaDataIndexTemplateService.java:172) >> [88:features.boss.elasticsearch.bundle:5.5.0] >> at >> org.elasticsearch.cluster.ClusterStateUpdateTask.execute(ClusterStateUpdateTask.java:45) >> [88:features.boss.elasticsearch.bundle:5.5.0] >> at >> org.elasticsearch.cluster.service.ClusterService.executeTasks(ClusterService.java:634) >> [88:features.boss.elasticsearch.bundle:5.5.0] >> at org.elasticsearch.cluster.service.ClusterService.calculateTa >> skOutputs(ClusterService.java:612) [88:features.boss.elasticsearc >> h.bundle:5.5.0] >> at >> org.elasticsearch.cluster.service.ClusterService.runTasks(ClusterService.java:571) >> [88:features.boss.elasticsearch.bundle:5.5.0] >> at org.elasticsearch.cluster.service.ClusterService$ClusterServ >> iceTaskBatcher.run(ClusterSer
Re: PaxLogging: org.ops4j.pax.logging.log4jv2.Log4jv2LoggerContext cannot be cast to org.apache.logging.log4j.core.LoggerContext
2017-10-02 6:43 GMT+02:00 Asma Zinneera Jabir : > > The way I have configured Log4j2 is through the following entry in > pax-logging.properties. > > org.ops4j.pax.logging.log4j2.config.file=path/to/log4j2.properties > You can configure the properties directly in the etc/org.ops4j.pax.logging.cfg too. > > So when I try: > > Hashtable log4jProps = new Hashtable(); > log4jProps.put( "appender.CONSOLE.layout.pattern", "[%d] %5p {%c} - > %m%ex%n" ); > configuration.update(log4jProps); > > This will add another entry into pax-logging.properties as > appender.CONSOLE.layout.pattern = [%d] %5p {%c} - %m%ex%n which makes all > the entries in pax-logging.properties invalid. > > To make my requirement clear, I have two things to do. > > 1. I have a Log4J2 custom memory appender in which writes log events to a > circular buffer. During the runtime, I need to display these logs in the > UI. For this, I should be able to get the memory appender form the log4j2 > context. > For this, you just need to register an OSGi service implementing org.ops4j.pax.logging.spi.PaxAppender and it will be given all log events. > 2. I need to give an option to the user to reconfigure all the appenders > during runtime throught the UI. For this, I should be able to reconfigure > the specified properties of appenders programatically. > Yes, that's doable without any problems. The thing you need to pay attention to is if the main configuration has an indirection to another file, in which case, you'd have to modify that file instead. The reason for this indirection is that at first, properties-based configuration was not available, so the main config would contain a pointer to the xml config. Now, if you control everything, just make sure the configuration is flattened in the org.ops4j.pax.logging configuration and it should be ok. Cheers, Guillaume Nodet > > > On Wednesday, August 9, 2017 at 9:00:12 PM UTC+5:30, Jérémie Brébec wrote: > >> Hello, >> >> I am using pax-logging 1.10.1 through Karaf 4.1.2 ; >> >> I am trying to integrate the log generated by my ElasticSearch bundle to >> the pax-logging implementation. However, this didn't work because a >> ClassCastException. I haven't see any "duplicate classloader issues", and >> when I check the code, the ClassCastException doesn't feel to be >> osgi-related. Is it a known issue or I am missing something ? >> >> Regards, >> Jérémie >> >> java.lang.ClassCastException: >> org.ops4j.pax.logging.log4jv2.Log4jv2LoggerContext >> cannot be cast to org.apache.logging.log4j.core.LoggerContext >> at >> org.apache.logging.log4j.core.LoggerContext.getContext(LoggerContext.java:190) >> [6:org.ops4j.pax.logging.pax-logging-log4j2:1.10.1] >> at >> org.apache.logging.log4j.core.config.Configurator.setLevel(Configurator.java:291) >> [6:org.ops4j.pax.logging.pax-logging-log4j2:1.10.1] >> at >> org.elasticsearch.common.logging.Loggers.setLevel(Loggers.java:149) >> [88:features.boss.elasticsearch.bundle:5.5.0] >> at >> org.elasticsearch.common.logging.Loggers.setLevel(Loggers.java:144) >> [88:features.boss.elasticsearch.bundle:5.5.0] >> at >> org.elasticsearch.index.SearchSlowLog.setLevel(SearchSlowLog.java:111) >> [88:features.boss.elasticsearch.bundle:5.5.0] >> at >> org.elasticsearch.index.SearchSlowLog.(SearchSlowLog.java:106) >> [88:features.boss.elasticsearch.bundle:5.5.0] >> at org.elasticsearch.index.IndexModule.(IndexModule.java:127) >> [88:features.boss.elasticsearch.bundle:5.5.0] >> at >> org.elasticsearch.indices.IndicesService.createIndexService(IndicesService.java:441) >> [88:features.boss.elasticsearch.bundle:5.5.0] >> at >> org.elasticsearch.indices.IndicesService.createIndex(IndicesService.java:414) >> [88:features.boss.elasticsearch.bundle:5.5.0] >> at org.elasticsearch.cluster.metadata.MetaDataIndexTemplateServ >> ice.validateAndAddTemplate(MetaDataIndexTemplateService.java:216) >> [88:features.boss.elasticsearch.bundle:5.5.0] >> at org.elasticsearch.cluster.metadata.MetaDataIndexTemplateServ >> ice.access$200(MetaDataIndexTemplateService.java:63) >> [88:features.boss.elasticsearch.bundle:5.5.0] >> at org.elasticsearch.cluster.metadata.MetaDataIndexTemplateServ >> ice$2.execute(MetaDataIndexTemplateService.java:172) >> [88:features.boss.elasticsearch.bundle:5.5.0] >> at >> org.elasticsearch.cluster.ClusterStateUpdateTask.execute(ClusterStateUpdateTask.java:45) >> [88:features.boss.elasticsearch.bundle:5.5.0] >> at >> org.elasticsearch.cluster.service.ClusterService.executeTasks(ClusterService.java:634) >> [88:features.boss.elasticsearch.bundle:5.5.0] >> at org.elasticsearch.cluster.service.ClusterService.calculateTa >> skOutputs(ClusterService.java:612) [88:features.boss.elasticsearc >> h.bundle:5.5.0] >> at >> org.elasticsearch.cluster.service.ClusterService.runTasks(ClusterService.java:571) >> [88:features.boss.elasticsearch.bundle:5.5.0]
Re: PaxLogging: org.ops4j.pax.logging.log4jv2.Log4jv2LoggerContext cannot be cast to org.apache.logging.log4j.core.LoggerContext
The way I have configured Log4j2 is through the following entry in pax-logging.properties. org.ops4j.pax.logging.log4j2.config.file=path/to/log4j2.properties So when I try: Hashtable log4jProps = new Hashtable(); log4jProps.put( "appender.CONSOLE.layout.pattern", "[%d] %5p {%c} - %m%ex%n" ); configuration.update(log4jProps); This will add another entry into pax-logging.properties as appender.CONSOLE.layout.pattern = [%d] %5p {%c} - %m%ex%n which makes all the entries in pax-logging.properties invalid. To make my requirement clear, I have two things to do. 1. I have a Log4J2 custom memory appender in which writes log events to a circular buffer. During the runtime, I need to display these logs in the UI. For this, I should be able to get the memory appender form the log4j2 context. 2. I need to give an option to the user to reconfigure all the appenders during runtime throught the UI. For this, I should be able to reconfigure the specified properties of appenders programatically. On Wednesday, August 9, 2017 at 9:00:12 PM UTC+5:30, Jérémie Brébec wrote: > > Hello, > > I am using pax-logging 1.10.1 through Karaf 4.1.2 ; > > I am trying to integrate the log generated by my ElasticSearch bundle to > the pax-logging implementation. However, this didn't work because a > ClassCastException. I haven't see any "duplicate classloader issues", and > when I check the code, the ClassCastException doesn't feel to be > osgi-related. Is it a known issue or I am missing something ? > > Regards, > Jérémie > > java.lang.ClassCastException: > org.ops4j.pax.logging.log4jv2.Log4jv2LoggerContext cannot be cast to > org.apache.logging.log4j.core.LoggerContext > at > org.apache.logging.log4j.core.LoggerContext.getContext(LoggerContext.java:190) > > [6:org.ops4j.pax.logging.pax-logging-log4j2:1.10.1] > at > org.apache.logging.log4j.core.config.Configurator.setLevel(Configurator.java:291) > > [6:org.ops4j.pax.logging.pax-logging-log4j2:1.10.1] > at > org.elasticsearch.common.logging.Loggers.setLevel(Loggers.java:149) > [88:features.boss.elasticsearch.bundle:5.5.0] > at > org.elasticsearch.common.logging.Loggers.setLevel(Loggers.java:144) > [88:features.boss.elasticsearch.bundle:5.5.0] > at > org.elasticsearch.index.SearchSlowLog.setLevel(SearchSlowLog.java:111) > [88:features.boss.elasticsearch.bundle:5.5.0] > at > org.elasticsearch.index.SearchSlowLog.(SearchSlowLog.java:106) > [88:features.boss.elasticsearch.bundle:5.5.0] > at > org.elasticsearch.index.IndexModule.(IndexModule.java:127) > [88:features.boss.elasticsearch.bundle:5.5.0] > at > org.elasticsearch.indices.IndicesService.createIndexService(IndicesService.java:441) > > [88:features.boss.elasticsearch.bundle:5.5.0] > at > org.elasticsearch.indices.IndicesService.createIndex(IndicesService.java:414) > [88:features.boss.elasticsearch.bundle:5.5.0] > at > org.elasticsearch.cluster.metadata.MetaDataIndexTemplateService.validateAndAddTemplate(MetaDataIndexTemplateService.java:216) > > [88:features.boss.elasticsearch.bundle:5.5.0] > at > org.elasticsearch.cluster.metadata.MetaDataIndexTemplateService.access$200(MetaDataIndexTemplateService.java:63) > > [88:features.boss.elasticsearch.bundle:5.5.0] > at > org.elasticsearch.cluster.metadata.MetaDataIndexTemplateService$2.execute(MetaDataIndexTemplateService.java:172) > > [88:features.boss.elasticsearch.bundle:5.5.0] > at > org.elasticsearch.cluster.ClusterStateUpdateTask.execute(ClusterStateUpdateTask.java:45) > > [88:features.boss.elasticsearch.bundle:5.5.0] > at > org.elasticsearch.cluster.service.ClusterService.executeTasks(ClusterService.java:634) > > [88:features.boss.elasticsearch.bundle:5.5.0] > at > org.elasticsearch.cluster.service.ClusterService.calculateTaskOutputs(ClusterService.java:612) > > [88:features.boss.elasticsearch.bundle:5.5.0] > at > org.elasticsearch.cluster.service.ClusterService.runTasks(ClusterService.java:571) > > [88:features.boss.elasticsearch.bundle:5.5.0] > at > org.elasticsearch.cluster.service.ClusterService$ClusterServiceTaskBatcher.run(ClusterService.java:263) > > [88:features.boss.elasticsearch.bundle:5.5.0] > at > org.elasticsearch.cluster.service.TaskBatcher.runIfNotProcessed(TaskBatcher.java:150) > > [88:features.boss.elasticsearch.bundle:5.5.0] > at > org.elasticsearch.cluster.service.TaskBatcher$BatchedTask.run(TaskBatcher.java:188) > > [88:features.boss.elasticsearch.bundle:5.5.0] > at > org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:569) > > [88:features.boss.elasticsearch.bundle:5.5.0] > at > org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.runAndClean(PrioritizedEsThreadPoolExecutor.java:247) > > [88:features.boss.elasticsearch.b