The problem is the context classloader. You have to make sure you set the context classloader to null when starting felix and when calling into felix from the outside.
The thing is, threads inherit the current context class loader. Furthermore, the context classloader gets set by the servlet container when the bridge servlet is called. The problem is that log4j is stupid and assumes that it should use the context classloader first to try to find classes. That isn't going to work when log4j is comming from a bundle -- hence, you have two options: 1. Set the context classloader to null while creating the framework instance and starting it _and_ set it to null when calling into the framework from the outside (_make sure_ to _set it back_ when you return). 2. Don't provide log4j from a bundle but make it available via the system bundle (i.e., use a version that you have outside and delegate it down). regards, Karl On Tue, Nov 27, 2012 at 8:26 AM, Bengt Rodehav <be...@rodehav.com> wrote: > Hello Charles, > > I recently had a similar problem that I brought up on the Karaf user list: > > > http://mail-archives.apache.org/mod_mbox/karaf-user/201211.mbox/%3CCAJ0TPG%2BERzf6Q709cndh-YqfP_HQq%3DVk6iA4ZQfEtZE7tJPWUw%40mail.gmail.com%3E > > Although my problem was that the application classloader had already loaded > some log4j classes due to the CLASSPATH environment variable on Windows, I > noted that everything worked fine using Equinox instead of Felix. > > Apparently Equinox does some tricks when it comes to hiding already loaded > classes. Maybe Felix developers can take a look at what Equinox is doing > and perhaps do something similar in Felix thus making Felix more resilient > to "polluted" classloaders. > > /Bengt > > > > 2010/11/18 Charles Moulliard <cmoulli...@gmail.com> > > > Hi, > > > > Some months ago, an interesting question has been drawn about the > > classloading issue of log4j class when we use pax-logging bundle within > > Felix embedded in a web application. > > > > http://www.mail-archive.com/**dev@felix.apache.org/msg04908.**html< > http://www.mail-archive.com/dev@felix.apache.org/msg04908.html> > > > > I'm faced to the same issue when I would like to use Apache Karaf (top > > level container of Apache Felix) deployed as a WAR. > > > > Does anybody has find a trick to solve the classloading issue ? > > > > INFO: locking > > 2010-11-18 18:08:36.667:INFO::Started SelectChannelConnector@0.0.0.** > > 0:8080 <http://SelectChannelConnector@0.0.0.0:8080> > > [INFO] Started Jetty Server > > [INFO] Starting scanner at interval of 10 seconds. > > log4j:ERROR A "org.apache.log4j.**ConsoleAppender" object is not > > assignable to a "org.apache.log4j.Appender" variable. > > log4j:ERROR The class "org.apache.log4j.Appender" was loaded by > > log4j:ERROR [4.0] whereas object of type > > log4j:ERROR "org.apache.log4j.**ConsoleAppender" was loaded by > > [ContextLoader@ServiceMix Embedded Example]. > > > > > > Regards, > > > > Charles M. > > Apache Camel, ServiceMix & Karaf committer > > > -- Karl Pauls karlpa...@gmail.com http://twitter.com/karlpauls http://www.linkedin.com/in/karlpauls https://profiles.google.com/karlpauls