Hi Bengt, I'm not sure if it also works for filters, but I wrote a tutorial [1] on how to add appenders to karaf.
regards, Achim [1] - http://nierbeck.de/cgi-bin/weblog_basic/index.php?p=201 2012/2/1 Bengt Rodehav <[email protected]> > I'm using Karaf 2.2.5 and would like to add a custom log4j filter to Pax > logging. The background can be found at: > > > http://karaf.922171.n3.nabble.com/Logging-using-log4j-filters-tt3699528.html > > I had discussion with Guillaume at the Karaf mailing list. In short, I had > misunderstood how the StringMatchFilter worked and realised that I need to > create my own custom filter in order to filter based on MDC information. > > It turned out that the filter I need had been developed in log4j trunk in > preparation for log4j 1.3. However, the development of log4j 1.3 has > stopped (and will not be resumed AFAIU). I then copied the source code from > log4j in order to repackage it by myself and create a custom filter. > > See "MDCMatchFilter" at: > > http://wiki.apache.org/logging-log4j/Log4jv13Features > > I think this is a filter that should be part of Pax logging (since it will > never be part of log4j). Can I create a JIRA for that or do you think it is > inappropriate to put it in Pax logging? > > Regardless of that, I still would like to get my custom filter to work - > which did not turn out to be very easy. > > I followed the guidelines in Karaf user manual. I created my filter bundle > (basically containing "stolen" log4j code for the MDCMatchFilter) as a > fragment with the host "org.ops4j.pax.logging.pax-logging-service". > > On Karaf startup I get the following error on stdout: > > *ERROR: Bundle org.ops4j.pax.logging.pax-logging-service [4] Error > starting mvn:org.ops4j.pax.logging/pax-logging-service/1.6.3 > (org.osgi.framework.BundleException: Activator start error in bundle > org.ops4j.pax.logging.pax-logging-service > [4].)java.lang.NoClassDefFoundError: org/apache/log4j/PaxLoggingConfigurator > * > * at > org.ops4j.pax.logging.service.internal.PaxLoggingServiceImpl.configureDefaults(PaxLoggingServiceImpl.java:251) > * > * at > org.ops4j.pax.logging.service.internal.PaxLoggingServiceImpl.<init>(PaxLoggingServiceImpl.java:61) > * > * at > org.ops4j.pax.logging.service.internal.Activator.start(Activator.java:108) > * > * at > org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:629) > * > * at > org.apache.felix.framework.Felix.activateBundle(Felix.java:1842)* > * at org.apache.felix.framework.Felix.startBundle(Felix.java:1759)* > * at > org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1163)* > * at > org.apache.felix.framework.StartLevelImpl.run(StartLevelImpl.java:264)* > * at java.lang.Thread.run(Thread.java:662)* > *Caused by: java.lang.ClassNotFoundException: > org.apache.log4j.PaxLoggingConfigurator not found by > org.ops4j.pax.logging.pax-logging-api [5]* > * at > org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:787) > * > * at > org.apache.felix.framework.ModuleImpl.access$400(ModuleImpl.java:71)* > * at > org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1768) > * > * at java.lang.ClassLoader.loadClass(ClassLoader.java:247)* > * at > org.apache.felix.framework.ModuleImpl.getClassByDelegation(ModuleImpl.java:645) > * > * at > org.apache.felix.framework.resolver.WireImpl.getClass(WireImpl.java:99)* > * at > org.apache.felix.framework.ModuleImpl.searchImports(ModuleImpl.java:1390)* > * at > org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:722) > * > * at > org.apache.felix.framework.ModuleImpl.access$400(ModuleImpl.java:71)* > * at > org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1768) > * > * at java.lang.ClassLoader.loadClass(ClassLoader.java:247)* > * ... 9 more* > > It indicates (I think) that the pax api bundle (bundle 5) cannot find the > PaxLoggingConfigurator class which resides in the package org.apache.log4j > package which in turn is contained both within the pax api bundle and the > pax service bundle. It is also exported by the pax api bundle (and imported > by the pax service bundle). I think this is really strange since it seems > to be the version in pax api that has been resolved and imported into pax > service. Why then cant't pax api find its own class? > > I have a feeling that I'm entering the tricky parts of OSGi here with > copies of classes (packages) in multiple bundles in combination with "uses" > constraints... > > I appreciate any advice as to how this is solved. I assume I'm not the > first developer to create a custom filter for Pax logging (but you never > know). > > /Bengt > > > > _______________________________________________ > general mailing list > [email protected] > http://lists.ops4j.org/mailman/listinfo/general > > -- Apache Karaf <http://karaf.apache.org/> Committer & PMC OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/> Committer & Project Lead blog <http://notizblog.nierbeck.de/>
_______________________________________________ general mailing list [email protected] http://lists.ops4j.org/mailman/listinfo/general
