log4j extras
timgstewart Feb 21, 2012 1:04 PMHopefully this is a nice easy question.
I want to use the log4j-extras-1.1.jar file from Log4j companions to make use of the time based rollover and auto-gzipping features in the org.apache.log4j.rolling.RollingFileAppender.
I updated my org.ops4j.paxlogging.cfg to use this appender:
File appender
log4j.appender.out=org.apache.log4j.rolling.RollingFileAppender
log4j.appender.out.rollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy
log4j.appender.out.rollingPolicy.FileNamePattern=/var/log/fuse/servicemix.esb-smx01.%d{yyyy-MM-dd}.gz
log4j.appender.out.rollingPolicy.ActiveFileName=/var/log/fuse/servicemix.esb-smx01.log
log4j.appender.out.layout=org.apache.log4j.PatternLayout
log4j.appender.out.layout.ConversionPattern=%d | %-5.5p | %-16.16t | %-32.32c | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n
log4j.appender.out.append=true
However, the class for the appender cannot be found as the extras are not included in the pax logging bundle. It appears that it embeds the log4j classes within the bundle jar.
I tried to put the log4j-extras-1.1.jar file from apache (which is an osgi bundle as well) in the various sub-folders under /lib as well as in the /system folder following the maven structure.
All attempts resulting in a NoClassDef found on startup when the logging tries to configure:
log4j:ERROR Could not instantiate class .
java.lang.ClassNotFoundException: org.apache.log4j.rolling.RollingFileAppender not found by org.ops4j.pax.logging.pax-logging-service
at org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:812)
at org.apache.felix.framework.ModuleImpl.access$400(ModuleImpl.java:72)
at org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1806)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at org.apache.log4j.helpers.Loader.loadClass(Loader.java:198)
at org.apache.log4j.helpers.OptionConverter.instantiateByClassName(OptionConverter.java:326)
at org.apache.log4j.helpers.OptionConverter.instantiateByKey(OptionConverter.java:123)
at org.apache.log4j.PaxLoggingConfigurator.parseAppender(PaxLoggingConfigurator.java:81)
at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:735)
at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:615)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:502)
at org.apache.log4j.PaxLoggingConfigurator.doConfigure(PaxLoggingConfigurator.java:57)
at org.ops4j.pax.logging.service.internal.PaxLoggingServiceImpl.updated(PaxLoggingServiceImpl.java:187)
at org.ops4j.pax.logging.service.internal.PaxLoggingServiceImpl$1ManagedPaxLoggingService.updated(PaxLoggingServiceImpl.java:321)
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1195)
at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:105)
at java.lang.Thread.run(Thread.java:662)
log4j:ERROR Could not instantiate appender named "out".
What can I do to make Fuse and pax-logging find this class?