[ https://issues.apache.org/jira/browse/LOG4J2-373?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13882421#comment-13882421 ]
Matt Sicker commented on LOG4J2-373: ------------------------------------ I meant log4j-core, not osgi. > Classloader issue in OSGi-environment > ------------------------------------- > > Key: LOG4J2-373 > URL: https://issues.apache.org/jira/browse/LOG4J2-373 > Project: Log4j 2 > Issue Type: Bug > Components: API, Core > Affects Versions: 2.0-beta9 > Environment: OSGi R5 / R4 (Apache Felix 4.x) > Reporter: Roland Weiglhofer > Priority: Critical > Labels: ClassLoader, OSGI > Attachments: log4j-api.patch > > > Using Log4j2 in a bundle causes following error: > ERROR StatusLogger org.apache.logging.log4j.core.impl.Log4jContextFactory > does not implement org.apache.logging.log4j.spi.LoggerContextFactory > ERROR StatusLogger Unable to locate a logging implementation, using > SimpleLogger > printing the ClassLoaders in LogManager gives me following output: > org.apache.logging.log4j.spi.LoggerContextFactory loaded by > org.apache.logging.log4j-api [13] > org.apache.logging.log4j.core.impl.Log4jContextFactory loaded by > sun.misc.Launcher$AppClassLoader@35a16869 > We have two different ClassLoaders. That's why the implementation is not > assignable. The core uses the bootstrap-classloader and the api uses the > bundle-classloader. > Workaround needed. Thx > addendum: > ProviderUtil.findClassLoader() returns the bootstrap-classloader but not the > bundle-classloader of the log4j2-core. The log4j2-core is a fragment of the > log4j2-api bundle. Thus, ProviderUtil.findClassLoader() must return the > bundle-classloader of log4j2-api. This a bug for the case that log4j2-core is > used as the implementation. There are other cases that will also cause > problems. Further investigations are necessary. > Workaround: > 1. check if log4j2 runs in an OSGI container. > Bundle mybundle = org.osgi.framework.FrameworkUtil.getBundle(MyClass.this); > 2. if(mybundle != null), than get bundle-classloader of log4j2-impl. > mybundle.adapt(BundleWiring.class).getClassLoader(); -- This message was sent by Atlassian JIRA (v6.1.5#6160) --------------------------------------------------------------------- To unsubscribe, e-mail: log4j-dev-unsubscr...@logging.apache.org For additional commands, e-mail: log4j-dev-h...@logging.apache.org