If this is purely OSGi, you can use their Version class for a better way of comparing versions.
On 15 July 2017 at 11:30, <[email protected]> wrote: > Repository: logging-log4j2 > Updated Branches: > refs/heads/master 8133b6a02 -> 9a08eb08f > > > LOG4J2-1971 - Register Log4j-core as a service. Bypass tests that don't > work on MacOS > > > Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo > Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/ > commit/2c16e17d > Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/2c16e17d > Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/2c16e17d > > Branch: refs/heads/master > Commit: 2c16e17d2a636155804c166ccff7b3d389fe03f0 > Parents: 8133b6a > Author: Ralph Goers <[email protected]> > Authored: Sat Jul 15 09:26:32 2017 -0700 > Committer: Ralph Goers <[email protected]> > Committed: Sat Jul 15 09:26:40 2017 -0700 > > ---------------------------------------------------------------------- > .../apache/logging/log4j/util/Activator.java | 27 +++++++++++++++++--- > .../apache/logging/log4j/util/ProviderUtil.java | 5 ++++ > .../logging/log4j/core/osgi/Activator.java | 11 ++++++++ > .../appender/FileAppenderPermissionsTest.java | 6 +++++ > ...irectWriteTempCompressedFilePatternTest.java | 4 +++ > ...ngAppenderTempCompressedFilePatternTest.java | 4 +++ > 6 files changed, 53 insertions(+), 4 deletions(-) > ---------------------------------------------------------------------- > > > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > 2c16e17d/log4j-api/src/main/java/org/apache/logging/log4j/ > util/Activator.java > ---------------------------------------------------------------------- > diff --git > a/log4j-api/src/main/java/org/apache/logging/log4j/util/Activator.java > b/log4j-api/src/main/java/org/apache/logging/log4j/util/Activator.java > index 2547b7d..30cd566 100644 > --- a/log4j-api/src/main/java/org/apache/logging/log4j/util/Activator.java > +++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/Activator.java > @@ -18,10 +18,12 @@ package org.apache.logging.log4j.util; > > import java.net.URL; > import java.security.Permission; > +import java.util.Collection; > import java.util.List; > > import org.apache.logging.log4j.Logger; > import org.apache.logging.log4j.spi.LoggerContextFactory; > +import org.apache.logging.log4j.spi.Provider; > import org.apache.logging.log4j.status.StatusLogger; > import org.osgi.framework.AdaptPermission; > import org.osgi.framework.AdminPermission; > @@ -29,6 +31,8 @@ import org.osgi.framework.Bundle; > import org.osgi.framework.BundleActivator; > import org.osgi.framework.BundleContext; > import org.osgi.framework.BundleEvent; > +import org.osgi.framework.InvalidSyntaxException; > +import org.osgi.framework.ServiceReference; > import org.osgi.framework.SynchronousBundleListener; > import org.osgi.framework.wiring.BundleWire; > import org.osgi.framework.wiring.BundleWiring; > @@ -63,7 +67,7 @@ public class Activator implements BundleActivator, > SynchronousBundleListener { > try { > checkPermission(new AdminPermission(bundle, > AdminPermission.RESOURCE)); > checkPermission(new AdaptPermission(BundleWiring.class.getName(), > bundle, AdaptPermission.ADAPT)); > - loadProvider(bundle.adapt(BundleWiring.class)); > + loadProvider(bundle.getBundleContext(), > bundle.adapt(BundleWiring.class)); > } catch (final SecurityException e) { > LOGGER.debug("Cannot access bundle [{}] contents. Ignoring.", > bundle.getSymbolicName(), e); > } catch (final Exception e) { > @@ -71,8 +75,23 @@ public class Activator implements BundleActivator, > SynchronousBundleListener { > } > } > > - private void loadProvider(final BundleWiring bundleWiring) { > - ProviderUtil.loadProviders(bundleWiring.getClassLoader()); > + private void loadProvider(final BundleContext context, final > BundleWiring bundleWiring) { > + String filter = "(APIVersion>=2.60)"; > + try { > + Collection<ServiceReference<Provider>> serviceReferences = > context.getServiceReferences(Provider.class, filter); > + Provider maxProvider = null; > + for (ServiceReference<Provider> serviceReference : > serviceReferences) { > + Provider provider = context.getService(serviceReference); > + if (maxProvider == null || provider.getPriority() > > maxProvider.getPriority()) { > + maxProvider = provider; > + } > + } > + if (maxProvider != null) { > + ProviderUtil.addProvider(maxProvider); > + } > + } catch (InvalidSyntaxException ex) { > + LOGGER.error("Invalid service filter: " + filter, ex); > + } > final List<URL> urls = bundleWiring.findEntries("META-INF", > "log4j-provider.properties", 0); > for (final URL url : urls) { > ProviderUtil.loadProvider(url, bundleWiring.getClassLoader()) > ; > @@ -86,7 +105,7 @@ public class Activator implements BundleActivator, > SynchronousBundleListener { > final BundleWiring self = context.getBundle().adapt( > BundleWiring.class); > final List<BundleWire> required = self.getRequiredWires( > LoggerContextFactory.class.getName()); > for (final BundleWire wire : required) { > - loadProvider(wire.getProviderWiring()); > + loadProvider(context, wire.getProviderWiring()); > } > context.addBundleListener(this); > final Bundle[] bundles = context.getBundles(); > > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > 2c16e17d/log4j-api/src/main/java/org/apache/logging/log4j/ > util/ProviderUtil.java > ---------------------------------------------------------------------- > diff --git > a/log4j-api/src/main/java/org/apache/logging/log4j/util/ProviderUtil.java > b/log4j-api/src/main/java/org/apache/logging/log4j/util/ProviderUtil.java > index 3bb5ad4..9449217 100644 > --- a/log4j-api/src/main/java/org/apache/logging/log4j/util/ > ProviderUtil.java > +++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/ > ProviderUtil.java > @@ -69,6 +69,11 @@ public final class ProviderUtil { > } > } > > + protected static void addProvider(Provider provider) { > + PROVIDERS.add(provider); > + LOGGER.debug("Loaded Provider {}", provider); > + } > + > /** > * Loads an individual Provider implementation. This method is really > only useful for the OSGi bundle activator and > * this class itself. > > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > 2c16e17d/log4j-core/src/main/java/org/apache/logging/log4j/ > core/osgi/Activator.java > ---------------------------------------------------------------------- > diff --git > a/log4j-core/src/main/java/org/apache/logging/log4j/core/osgi/Activator.java > b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > osgi/Activator.java > index 4da1ecc..ab9f5ba 100644 > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/ > osgi/Activator.java > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > osgi/Activator.java > @@ -17,18 +17,22 @@ > > package org.apache.logging.log4j.core.osgi; > > +import java.util.Hashtable; > import java.util.concurrent.atomic.AtomicReference; > > import org.apache.logging.log4j.LogManager; > import org.apache.logging.log4j.Logger; > import org.apache.logging.log4j.core.config.plugins.util.PluginRegistry; > +import org.apache.logging.log4j.core.impl.Log4jProvider; > import org.apache.logging.log4j.core.util.Constants; > +import org.apache.logging.log4j.spi.Provider; > import org.apache.logging.log4j.status.StatusLogger; > import org.apache.logging.log4j.util.PropertiesUtil; > import org.osgi.framework.Bundle; > import org.osgi.framework.BundleActivator; > import org.osgi.framework.BundleContext; > import org.osgi.framework.BundleEvent; > +import org.osgi.framework.ServiceRegistration; > import org.osgi.framework.SynchronousBundleListener; > import org.osgi.framework.wiring.BundleWiring; > > @@ -41,8 +45,14 @@ public final class Activator implements > BundleActivator, SynchronousBundleListen > > private final AtomicReference<BundleContext> contextRef = new > AtomicReference<>(); > > + ServiceRegistration provideRegistration = null; > + > @Override > public void start(final BundleContext context) throws Exception { > + Provider provider = new Log4jProvider(); > + Hashtable<String, String> props = new Hashtable<>(); > + props.put("APIVersion", "2.60"); > + provideRegistration = > context.registerService(Provider.class.getName(), > provider, props); > // allow the user to override the default ContextSelector (e.g., > by using BasicContextSelector for a global cfg) > if > (PropertiesUtil.getProperties().getStringProperty(Constants.LOG4J_CONTEXT_SELECTOR) > == null) { > System.setProperty(Constants.LOG4J_CONTEXT_SELECTOR, > BundleContextSelector.class.getName()); > @@ -80,6 +90,7 @@ public final class Activator implements BundleActivator, > SynchronousBundleListen > > @Override > public void stop(final BundleContext context) throws Exception { > + provideRegistration.unregister(); > this.contextRef.compareAndSet(context, null); > LogManager.shutdown(); > } > > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > 2c16e17d/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ > FileAppenderPermissionsTest.java > ---------------------------------------------------------------------- > diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/FileAppenderPermissionsTest.java b/log4j-core/src/test/java/ > org/apache/logging/log4j/core/appender/FileAppenderPermissionsTest.java > index 8f67a27..6dbd712 100644 > --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ > FileAppenderPermissionsTest.java > +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ > FileAppenderPermissionsTest.java > @@ -33,9 +33,11 @@ import java.util.Arrays; > import java.util.Collection; > import java.util.List; > > +import org.apache.commons.lang3.SystemUtils; > import org.apache.logging.log4j.Level; > import org.apache.logging.log4j.core.Layout; > import org.apache.logging.log4j.core.LogEvent; > +import org.apache.logging.log4j.core.config.status.StatusConfiguration; > import org.apache.logging.log4j.core.impl.Log4jLogEvent; > import org.apache.logging.log4j.core.layout.PatternLayout; > import org.apache.logging.log4j.core.util.FileUtils; > @@ -79,6 +81,7 @@ public class FileAppenderPermissionsTest { > > @BeforeClass > public static void beforeClass() { > + System.setProperty("log4j2.debug", "true"); > Assume.assumeTrue(FileUtils.isFilePosixAttributeViewSupported()); > } > > @@ -188,6 +191,9 @@ public class FileAppenderPermissionsTest { > } > > public static String findAGroup(final String user) throws IOException > { > + if (SystemUtils.IS_OS_MAC_OSX) { > + return "staff"; > + } > String group = user; > try (FileInputStream fis = new FileInputStream("/etc/group")) { > final List<String> groups = > org.apache.commons.io.IOUtils.readLines(fis, > Charset.defaultCharset()); > > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > 2c16e17d/log4j-core/src/test/java/org/apache/logging/log4j/ > core/appender/rolling/RollingAppenderDirectWriteTemp > CompressedFilePatternTest.java > ---------------------------------------------------------------------- > diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/rolling/RollingAppenderDirectWriteTempCompressedFilePatternTest.java > b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/ > RollingAppenderDirectWriteTempCompressedFilePatternTest.java > index 4e913cf..06f1cbc 100644 > --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/rolling/RollingAppenderDirectWriteTemp > CompressedFilePatternTest.java > +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/rolling/RollingAppenderDirectWriteTemp > CompressedFilePatternTest.java > @@ -32,8 +32,10 @@ import java.nio.file.WatchEvent; > import java.nio.file.WatchKey; > import java.nio.file.WatchService; > > +import org.apache.commons.lang3.SystemUtils; > import org.apache.logging.log4j.Logger; > import org.apache.logging.log4j.junit.LoggerContextRule; > +import org.junit.Assume; > import org.junit.Before; > import org.junit.Rule; > import org.junit.Test; > @@ -58,6 +60,8 @@ public class > RollingAppenderDirectWriteTempCompressedFilePatternTest > { > > @Before > public void setUp() throws Exception { > + // Disable this test on MacOS. FileWatcher isn't fast enough to > work properly. > + Assume.assumeTrue(!SystemUtils.IS_OS_MAC_OSX); > this.logger = loggerContextRule.getLogger( > RollingAppenderDirectWriteTest.class.getName()); > } > > > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > 2c16e17d/log4j-core/src/test/java/org/apache/logging/log4j/ > core/appender/rolling/RollingAppenderTempCompressedFilePatternTest.java > ---------------------------------------------------------------------- > diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/rolling/RollingAppenderTempCompressedFilePatternTest.java > b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/ > RollingAppenderTempCompressedFilePatternTest.java > index c1755ee..03fd6be 100644 > --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/rolling/RollingAppenderTempCompressedFilePatternTest.java > +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/ > appender/rolling/RollingAppenderTempCompressedFilePatternTest.java > @@ -38,9 +38,11 @@ import java.util.concurrent.TimeUnit; > import org.apache.commons.compress.compressors.CompressorException; > import org.apache.commons.compress.compressors.CompressorStreamFactory; > import org.apache.commons.compress.utils.IOUtils; > +import org.apache.commons.lang3.SystemUtils; > import org.apache.logging.log4j.Logger; > import org.apache.logging.log4j.core.util.Closer; > import org.apache.logging.log4j.junit.LoggerContextRule; > +import org.junit.Assume; > import org.junit.Before; > import org.junit.Rule; > import org.junit.Test; > @@ -66,6 +68,8 @@ public class RollingAppenderTempCompressedFilePatternTest > { > > @Before > public void setUp() throws Exception { > + // Disable this test on MacOS. FileWatcher isn't fast enough to > work properly. > + Assume.assumeTrue(!SystemUtils.IS_OS_MAC_OSX); > this.logger = loggerContextRule.getLogger( > RollingAppenderTempCompressedFilePatternTest.class.getName()); > } > > > -- Matt Sicker <[email protected]>
