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:
