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.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]>


Reply via email to