I mean you can wrap the version into the Version class rather than use a
double. It has built in logic for comparing API versions, so for example,
if Log4j 2.10.0 becomes a required API version, you won't be comparing
2.100 with 2.60.

On 16 July 2017 at 11:21, Ralph Goers <[email protected]> wrote:

> This is the effective version of Log4j-API (i.e. the last API version that
> would impact an implementation). That hasn’t changed since 2.6.
>
> Ralph
>
> > On Jul 16, 2017, at 8:59 AM, Matt Sicker <[email protected]> wrote:
> >
> > 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.isFilePosixAttributeViewSuppor
> ted());
> >>     }
> >>
> >> @@ -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/RollingAppenderDirectWriteTemp
> CompressedFilePatternTest.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 RollingAppenderDirectWriteTemp
> CompressedFilePatternTest
> >> {
> >>
> >>     @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 RollingAppenderTempCompressedF
> ilePatternTest
> >> {
> >>
> >>     @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]>
>
>
>


-- 
Matt Sicker <[email protected]>

Reply via email to