This is an automated email from the ASF dual-hosted git repository.

pkarwasz pushed a commit to branch fix/apply-property-environment
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit 3ded0ce2b27d95c625d6ebc9a97a2ef6d7a41fda
Author: Piotr P. Karwasz <[email protected]>
AuthorDate: Fri Mar 15 12:08:39 2024 +0100

    Adapt `log4j-plugins` to Log4j API 2.x
---
 .../log4j/plugins/util/AnnotationUtilTest.java     |  1 +
 .../org/apache/logging/log4j/plugins/Ordered.java  |  3 +-
 .../plugins/condition/OnPropertyCondition.java     |  2 +-
 .../plugins/di/ConfigurableInstanceFactory.java    |  4 +-
 .../org/apache/logging/log4j/plugins/di/DI.java    |  8 ++-
 .../log4j/plugins/di/DefaultInstanceFactory.java   |  2 +-
 .../org/apache/logging/log4j/plugins/di/Key.java   |  2 +-
 .../org/apache/logging/log4j/plugins/di/Keys.java  |  4 +-
 .../{ => internal}/util/AnnotatedAnnotation.java   |  2 +-
 .../{ => internal}/util/AnnotationUtil.java        |  2 +-
 .../log4j/plugins/internal/util/BeanUtils.java     |  1 -
 .../log4j/plugins/model/PluginRegistry.java        | 67 ++++++++++------------
 .../apache/logging/log4j/plugins}/util/Assert.java |  2 +-
 .../log4j/plugins/util/OrderedComparator.java      |  1 +
 .../logging/log4j/plugins/util/package-info.java   |  5 --
 .../validation/validators/RequiredValidator.java   |  2 +-
 16 files changed, 52 insertions(+), 56 deletions(-)

diff --git 
a/log4j-plugins-test/src/test/java/org/apache/logging/log4j/plugins/util/AnnotationUtilTest.java
 
b/log4j-plugins-test/src/test/java/org/apache/logging/log4j/plugins/util/AnnotationUtilTest.java
index 4ee36ec0d6..fe948169b8 100644
--- 
a/log4j-plugins-test/src/test/java/org/apache/logging/log4j/plugins/util/AnnotationUtilTest.java
+++ 
b/log4j-plugins-test/src/test/java/org/apache/logging/log4j/plugins/util/AnnotationUtilTest.java
@@ -27,6 +27,7 @@ import java.lang.annotation.RetentionPolicy;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.util.stream.Stream;
+import org.apache.logging.log4j.plugins.internal.util.AnnotationUtil;
 import org.junit.jupiter.api.DynamicTest;
 import org.junit.jupiter.api.TestFactory;
 
diff --git 
a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/Ordered.java 
b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/Ordered.java
index 5661f43313..44f3325408 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/Ordered.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/Ordered.java
@@ -22,12 +22,13 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 import java.lang.reflect.AnnotatedElement;
+import org.apache.logging.log4j.plugins.internal.util.AnnotationUtil;
 
 /**
  * Specifies the order in which the annotated element should be considered for 
dependency injection.
  *
  * @see org.apache.logging.log4j.plugins.util.OrderedComparator 
OrderedComparator
- * @see 
org.apache.logging.log4j.plugins.util.AnnotationUtil#getOrder(AnnotatedElement) 
getOrder
+ * @see AnnotationUtil#getOrder(AnnotatedElement) getOrder
  */
 @Target({ElementType.TYPE, ElementType.METHOD, ElementType.TYPE_USE})
 @Retention(RetentionPolicy.RUNTIME)
diff --git 
a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/condition/OnPropertyCondition.java
 
b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/condition/OnPropertyCondition.java
index 35b52043ca..482d767954 100644
--- 
a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/condition/OnPropertyCondition.java
+++ 
b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/condition/OnPropertyCondition.java
@@ -20,7 +20,7 @@ import java.lang.reflect.AnnotatedElement;
 import java.lang.reflect.Method;
 import java.util.stream.Stream;
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.plugins.util.AnnotationUtil;
+import org.apache.logging.log4j.plugins.internal.util.AnnotationUtil;
 import org.apache.logging.log4j.status.StatusLogger;
 
 public class OnPropertyCondition implements Condition {
diff --git 
a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/ConfigurableInstanceFactory.java
 
b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/ConfigurableInstanceFactory.java
index 7f82f2f57d..77f150cf01 100644
--- 
a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/ConfigurableInstanceFactory.java
+++ 
b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/ConfigurableInstanceFactory.java
@@ -26,8 +26,8 @@ import 
org.apache.logging.log4j.plugins.di.spi.FactoryResolver;
 import org.apache.logging.log4j.plugins.di.spi.InstancePostProcessor;
 import org.apache.logging.log4j.plugins.di.spi.ReflectionAgent;
 import org.apache.logging.log4j.plugins.di.spi.Scope;
-import org.apache.logging.log4j.plugins.util.AnnotatedAnnotation;
-import org.apache.logging.log4j.plugins.util.AnnotationUtil;
+import org.apache.logging.log4j.plugins.internal.util.AnnotatedAnnotation;
+import org.apache.logging.log4j.plugins.internal.util.AnnotationUtil;
 import org.apache.logging.log4j.plugins.util.OrderedComparator;
 import org.apache.logging.log4j.plugins.validation.Constraint;
 import 
org.apache.logging.log4j.plugins.validation.ConstraintValidationException;
diff --git 
a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/DI.java 
b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/DI.java
index fcd009621f..07d968b98f 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/DI.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/DI.java
@@ -27,6 +27,7 @@ import java.util.function.Supplier;
 import 
org.apache.logging.log4j.plugins.di.spi.ConfigurableInstanceFactoryPostProcessor;
 import org.apache.logging.log4j.plugins.di.spi.Scope;
 import org.apache.logging.log4j.plugins.util.OrderedComparator;
+import org.apache.logging.log4j.status.StatusLogger;
 import org.apache.logging.log4j.util.Lazy;
 import org.apache.logging.log4j.util.ServiceLoaderUtil;
 
@@ -75,8 +76,11 @@ public final class DI {
          */
         public FactoryBuilder() {
             provider = DefaultInstanceFactory::new;
-            initializer = factory -> 
ServiceLoaderUtil.safeStream(ServiceLoader.load(
-                            ConfigurableInstanceFactoryPostProcessor.class, 
DI.class.getClassLoader()))
+            initializer = factory -> ServiceLoaderUtil.safeStream(
+                            ConfigurableInstanceFactoryPostProcessor.class,
+                            ServiceLoader.load(
+                                    
ConfigurableInstanceFactoryPostProcessor.class, DI.class.getClassLoader()),
+                            StatusLogger.getLogger())
                     .sorted(Comparator.comparing(
                             
ConfigurableInstanceFactoryPostProcessor::getClass, OrderedComparator.INSTANCE))
                     .forEachOrdered(processor -> 
processor.postProcessFactory(factory));
diff --git 
a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/DefaultInstanceFactory.java
 
b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/DefaultInstanceFactory.java
index 157e40ae22..4762cf172e 100644
--- 
a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/DefaultInstanceFactory.java
+++ 
b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/DefaultInstanceFactory.java
@@ -47,10 +47,10 @@ import 
org.apache.logging.log4j.plugins.di.spi.InstancePostProcessor;
 import org.apache.logging.log4j.plugins.di.spi.ReflectionAgent;
 import org.apache.logging.log4j.plugins.di.spi.ResolvableKey;
 import org.apache.logging.log4j.plugins.di.spi.Scope;
+import org.apache.logging.log4j.plugins.internal.util.AnnotationUtil;
 import org.apache.logging.log4j.plugins.internal.util.BeanUtils;
 import org.apache.logging.log4j.plugins.internal.util.BindingMap;
 import org.apache.logging.log4j.plugins.internal.util.HierarchicalMap;
-import org.apache.logging.log4j.plugins.util.AnnotationUtil;
 import org.apache.logging.log4j.plugins.util.OrderedComparator;
 import org.apache.logging.log4j.status.StatusLogger;
 import org.apache.logging.log4j.util.Cast;
diff --git 
a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/Key.java 
b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/Key.java
index 3da9a3eb49..6371cd8955 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/Key.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/Key.java
@@ -34,7 +34,7 @@ import org.apache.logging.log4j.plugins.QualifierType;
 import org.apache.logging.log4j.plugins.di.spi.InjectionPoint;
 import org.apache.logging.log4j.plugins.di.spi.ResolvableKey;
 import org.apache.logging.log4j.plugins.di.spi.Scope;
-import org.apache.logging.log4j.plugins.util.AnnotationUtil;
+import org.apache.logging.log4j.plugins.internal.util.AnnotationUtil;
 import org.apache.logging.log4j.plugins.util.TypeUtil;
 import org.apache.logging.log4j.util.StringBuilderFormattable;
 import org.apache.logging.log4j.util.Strings;
diff --git 
a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/Keys.java 
b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/Keys.java
index 757d4b3c6f..d4f2ae7f8d 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/Keys.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/Keys.java
@@ -26,13 +26,13 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Optional;
 import org.apache.logging.log4j.plugins.Namespace;
+import org.apache.logging.log4j.plugins.internal.util.AnnotatedAnnotation;
+import org.apache.logging.log4j.plugins.internal.util.AnnotationUtil;
 import org.apache.logging.log4j.plugins.internal.util.BeanUtils;
 import org.apache.logging.log4j.plugins.name.AliasesProvider;
 import org.apache.logging.log4j.plugins.name.AnnotatedElementAliasesProvider;
 import org.apache.logging.log4j.plugins.name.AnnotatedElementNameProvider;
 import org.apache.logging.log4j.plugins.name.NameProvider;
-import org.apache.logging.log4j.plugins.util.AnnotatedAnnotation;
-import org.apache.logging.log4j.plugins.util.AnnotationUtil;
 import org.apache.logging.log4j.plugins.util.ReflectionUtil;
 import org.apache.logging.log4j.util.Cast;
 import org.apache.logging.log4j.util.Strings;
diff --git 
a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/AnnotatedAnnotation.java
 
b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/internal/util/AnnotatedAnnotation.java
similarity index 95%
rename from 
log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/AnnotatedAnnotation.java
rename to 
log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/internal/util/AnnotatedAnnotation.java
index 31ba92aa29..0b5398a120 100644
--- 
a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/AnnotatedAnnotation.java
+++ 
b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/internal/util/AnnotatedAnnotation.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.logging.log4j.plugins.util;
+package org.apache.logging.log4j.plugins.internal.util;
 
 import java.lang.annotation.Annotation;
 
diff --git 
a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/AnnotationUtil.java
 
b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/internal/util/AnnotationUtil.java
similarity index 99%
rename from 
log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/AnnotationUtil.java
rename to 
log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/internal/util/AnnotationUtil.java
index a084be78e5..5bd9cb13a5 100644
--- 
a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/AnnotationUtil.java
+++ 
b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/internal/util/AnnotationUtil.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.logging.log4j.plugins.util;
+package org.apache.logging.log4j.plugins.internal.util;
 
 import java.lang.annotation.Annotation;
 import java.lang.annotation.ElementType;
diff --git 
a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/internal/util/BeanUtils.java
 
b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/internal/util/BeanUtils.java
index 928209d686..de24920b26 100644
--- 
a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/internal/util/BeanUtils.java
+++ 
b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/internal/util/BeanUtils.java
@@ -38,7 +38,6 @@ import org.apache.logging.log4j.plugins.di.Key;
 import org.apache.logging.log4j.plugins.di.NotInjectableException;
 import org.apache.logging.log4j.plugins.di.spi.DependencyChain;
 import org.apache.logging.log4j.plugins.di.spi.ResolvableKey;
-import org.apache.logging.log4j.plugins.util.AnnotationUtil;
 import org.apache.logging.log4j.util.Cast;
 import org.apache.logging.log4j.util.InternalApi;
 
diff --git 
a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/model/PluginRegistry.java
 
b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/model/PluginRegistry.java
index 6aaa160dee..dbd4fdc8b0 100644
--- 
a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/model/PluginRegistry.java
+++ 
b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/model/PluginRegistry.java
@@ -31,10 +31,11 @@ import java.util.Map;
 import java.util.ServiceLoader;
 import java.util.concurrent.atomic.AtomicInteger;
 import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.plugins.Inject;
 import org.apache.logging.log4j.plugins.Singleton;
 import org.apache.logging.log4j.status.StatusLogger;
 import org.apache.logging.log4j.util.Lazy;
-import org.apache.logging.log4j.util.LoaderUtil;
+import org.apache.logging.log4j.util.ServiceLoaderUtil;
 
 /**
  * Registry singleton for PluginType maps partitioned by source type and then 
by category names.
@@ -54,27 +55,20 @@ public class PluginRegistry {
     /**
      * Contains plugins found from {@link PluginService} services and legacy 
Log4j2Plugins.dat cache files in the main CLASSPATH.
      */
-    private final Lazy<Namespaces> namespacesLazy = Lazy.lazy(() -> {
-        final Namespaces namespaces = 
decodeCacheFiles(LoaderUtil.getClassLoader());
-        Throwable throwable = null;
-        ClassLoader errorClassLoader = null;
-        boolean allFail = true;
-        for (ClassLoader classLoader : LoaderUtil.getClassLoaders()) {
+    private final Lazy<Namespaces> namespacesLazy;
+
+    @Inject
+    public PluginRegistry(final ClassLoader classLoader) {
+        namespacesLazy = Lazy.lazy(() -> {
+            final Namespaces namespaces = decodeCacheFiles(classLoader);
             try {
                 loadPlugins(classLoader, namespaces);
-                allFail = false;
-            } catch (Throwable ex) {
-                if (throwable == null) {
-                    throwable = ex;
-                    errorClassLoader = classLoader;
-                }
+            } catch (final Throwable e) {
+                LOGGER.debug("Unable to retrieve provider from ClassLoader 
{}", classLoader, e);
             }
-        }
-        if (allFail && throwable != null) {
-            LOGGER.debug("Unable to retrieve provider from ClassLoader {}", 
errorClassLoader, throwable);
-        }
-        return namespaces;
-    });
+            return namespaces;
+        });
+    }
 
     /**
      * Resets the registry to an empty state.
@@ -89,23 +83,20 @@ public class PluginRegistry {
      * @param namespaces The Namespaces to merge discovered plugins to
      * @since 3.0
      */
-    private void loadPlugins(ClassLoader classLoader, Namespaces namespaces) {
+    private void loadPlugins(final ClassLoader classLoader, final Namespaces 
namespaces) {
         final long startTime = System.nanoTime();
-        final ServiceLoader<PluginService> serviceLoader = 
ServiceLoader.load(PluginService.class, classLoader);
         final AtomicInteger pluginCount = new AtomicInteger();
-        for (final PluginService pluginService : serviceLoader) {
-            pluginService
-                    .getNamespaces()
-                    .values()
-                    .forEach(category -> 
pluginCount.addAndGet(namespaces.merge(category)));
-        }
-        final int numPlugins = pluginCount.get();
-        LOGGER.debug(() -> {
-            final long endTime = System.nanoTime();
-            final DecimalFormat numFormat = new DecimalFormat("#0.000000");
-            return "Took " + numFormat.format((endTime - startTime) * 1e-9) + 
" seconds to load " + numPlugins
-                    + " plugins from " + classLoader;
-        });
+        ServiceLoaderUtil.safeStream(
+                        PluginService.class,
+                        ServiceLoader.load(PluginService.class, classLoader),
+                        StatusLogger.getLogger())
+                .forEach(pluginService -> {
+                    pluginService
+                            .getNamespaces()
+                            .values()
+                            .forEach(category -> 
pluginCount.addAndGet(namespaces.merge(category)));
+                });
+        reportLoadTime(classLoader, startTime, pluginCount);
     }
 
     private Namespaces decodeCacheFiles(final ClassLoader classLoader) {
@@ -128,14 +119,18 @@ public class PluginRegistry {
             namespaces.add(type);
             pluginCount.incrementAndGet();
         }));
+        reportLoadTime(classLoader, startTime, pluginCount);
+        return namespaces;
+    }
+
+    private void reportLoadTime(final ClassLoader classLoader, final long 
startTime, final AtomicInteger pluginCount) {
         final int numPlugins = pluginCount.get();
-        LOGGER.debug(() -> {
+        LOGGER.info(() -> {
             final long endTime = System.nanoTime();
             final DecimalFormat numFormat = new DecimalFormat("#0.000000");
             return "Took " + numFormat.format((endTime - startTime) * 1e-9) + 
" seconds to load " + numPlugins
                     + " plugins from " + classLoader;
         });
-        return namespaces;
     }
 
     /**
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/Assert.java 
b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/Assert.java
similarity index 98%
rename from log4j-api/src/main/java/org/apache/logging/log4j/util/Assert.java
rename to 
log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/Assert.java
index b2eb2a9d3b..99d41e7b6f 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/Assert.java
+++ 
b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/Assert.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.logging.log4j.util;
+package org.apache.logging.log4j.plugins.util;
 
 import java.util.Collection;
 import java.util.Map;
diff --git 
a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/OrderedComparator.java
 
b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/OrderedComparator.java
index cb3620765d..990178873e 100644
--- 
a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/OrderedComparator.java
+++ 
b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/OrderedComparator.java
@@ -25,6 +25,7 @@ import java.util.Comparator;
 import java.util.OptionalInt;
 import org.apache.logging.log4j.plugins.Ordered;
 import org.apache.logging.log4j.plugins.di.Keys;
+import org.apache.logging.log4j.plugins.internal.util.AnnotationUtil;
 import org.apache.logging.log4j.util.Strings;
 
 /**
diff --git 
a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/package-info.java
 
b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/package-info.java
index a688d2dd51..ac3540396d 100644
--- 
a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/package-info.java
+++ 
b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/package-info.java
@@ -14,9 +14,4 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-@Export
-@Version("1.0.0")
 package org.apache.logging.log4j.plugins.util;
-
-import org.osgi.annotation.bundle.Export;
-import org.osgi.annotation.versioning.Version;
diff --git 
a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/validation/validators/RequiredValidator.java
 
b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/validation/validators/RequiredValidator.java
index 464c3c4d8a..30dda1e548 100644
--- 
a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/validation/validators/RequiredValidator.java
+++ 
b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/validation/validators/RequiredValidator.java
@@ -19,10 +19,10 @@ package 
org.apache.logging.log4j.plugins.validation.validators;
 import java.util.Collection;
 import java.util.Map;
 import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.plugins.util.Assert;
 import org.apache.logging.log4j.plugins.validation.ConstraintValidator;
 import org.apache.logging.log4j.plugins.validation.constraints.Required;
 import org.apache.logging.log4j.status.StatusLogger;
-import org.apache.logging.log4j.util.Assert;
 
 /**
  * Validator that checks an object for emptiness. Emptiness is defined here as:

Reply via email to