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

mattsicker pushed a commit to branch 2.x
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git


The following commit(s) were added to refs/heads/2.x by this push:
     new d99a5a7b72 Use Lazy in some places from 3.0
d99a5a7b72 is described below

commit d99a5a7b72cebe3888db7c039ae299e2fdecea38
Author: Matt Sicker <[email protected]>
AuthorDate: Fri Nov 3 18:55:12 2023 -0500

    Use Lazy in some places from 3.0
---
 .../apache/logging/log4j/message/ThreadDumpMessage.java    | 12 +++---------
 .../java/org/apache/logging/log4j/util/PropertiesUtil.java |  5 +++--
 .../logging/log4j/core/selector/BasicContextSelector.java  | 14 ++++++--------
 .../log4j/core/selector/ClassLoaderContextSelector.java    | 13 +++++--------
 4 files changed, 17 insertions(+), 27 deletions(-)

diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/ThreadDumpMessage.java
 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/ThreadDumpMessage.java
index 0b8672a66f..190ec259b9 100644
--- 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/ThreadDumpMessage.java
+++ 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/ThreadDumpMessage.java
@@ -27,6 +27,7 @@ import aQute.bnd.annotation.Cardinality;
 import aQute.bnd.annotation.Resolution;
 import aQute.bnd.annotation.spi.ServiceConsumer;
 import org.apache.logging.log4j.message.ThreadDumpMessage.ThreadInfoFactory;
+import org.apache.logging.log4j.util.Lazy;
 import org.apache.logging.log4j.util.ServiceLoaderUtil;
 import org.apache.logging.log4j.util.StringBuilderFormattable;
 import org.apache.logging.log4j.util.Strings;
@@ -40,7 +41,7 @@ import static org.apache.logging.log4j.util.Chars.LF;
 @ServiceConsumer(value = ThreadInfoFactory.class, resolution = 
Resolution.OPTIONAL, cardinality = Cardinality.SINGLE)
 public class ThreadDumpMessage implements Message, StringBuilderFormattable {
     private static final long serialVersionUID = -1103400781608841088L;
-    private static ThreadInfoFactory FACTORY;
+    private static final Lazy<ThreadInfoFactory> FACTORY = 
Lazy.lazy(ThreadDumpMessage::initFactory);
 
     private volatile Map<ThreadInformation, StackTraceElement[]> threads;
     private final String title;
@@ -52,7 +53,7 @@ public class ThreadDumpMessage implements Message, 
StringBuilderFormattable {
      */
     public ThreadDumpMessage(final String title) {
         this.title = title == null ? Strings.EMPTY : title;
-        threads = getFactory().createThreadInfo();
+        threads = FACTORY.get().createThreadInfo();
     }
 
     private ThreadDumpMessage(final String formattedMsg, final String title) {
@@ -60,13 +61,6 @@ public class ThreadDumpMessage implements Message, 
StringBuilderFormattable {
         this.title = title == null ? Strings.EMPTY : title;
     }
 
-    private static ThreadInfoFactory getFactory() {
-        if (FACTORY == null) {
-            FACTORY = initFactory();
-        }
-        return FACTORY;
-    }
-
     private static ThreadInfoFactory initFactory() {
         return ServiceLoaderUtil.loadServices(ThreadInfoFactory.class, 
MethodHandles.lookup(), false)
                 .findFirst()
diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/util/PropertiesUtil.java 
b/log4j-api/src/main/java/org/apache/logging/log4j/util/PropertiesUtil.java
index 3408de505e..ac25fdc620 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/PropertiesUtil.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/PropertiesUtil.java
@@ -57,7 +57,8 @@ public final class PropertiesUtil {
 
     private static final String LOG4J_PROPERTIES_FILE_NAME = 
"log4j2.component.properties";
     private static final String LOG4J_SYSTEM_PROPERTIES_FILE_NAME = 
"log4j2.system.properties";
-    private static final PropertiesUtil LOG4J_PROPERTIES = new 
PropertiesUtil(LOG4J_PROPERTIES_FILE_NAME, false);
+    private static final Lazy<PropertiesUtil> COMPONENT_PROPERTIES =
+            Lazy.lazy(() -> new PropertiesUtil(LOG4J_PROPERTIES_FILE_NAME, 
false));
 
     private final Environment environment;
 
@@ -123,7 +124,7 @@ public final class PropertiesUtil {
      * @return the main Log4j PropertiesUtil instance.
      */
     public static PropertiesUtil getProperties() {
-        return LOG4J_PROPERTIES;
+        return COMPONENT_PROPERTIES.get();
     }
 
     /**
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/BasicContextSelector.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/BasicContextSelector.java
index b8c3679c26..158ea40186 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/BasicContextSelector.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/BasicContextSelector.java
@@ -17,20 +17,20 @@
 package org.apache.logging.log4j.core.selector;
 
 import java.net.URI;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.impl.ContextAnchor;
+import org.apache.logging.log4j.util.Lazy;
 
 /**
  * Returns either this Thread's context or the default LoggerContext.
  */
 public class BasicContextSelector implements ContextSelector {
 
-    private static final LoggerContext CONTEXT = new LoggerContext("Default");
+    private final Lazy<LoggerContext> defaultLoggerContext = Lazy.lazy(() -> 
new LoggerContext("Default"));
 
     @Override
     public void shutdown(final String fqcn, final ClassLoader loader, final 
boolean currentContext, final boolean allContexts) {
@@ -49,7 +49,7 @@ public class BasicContextSelector implements ContextSelector {
     @Override
     public LoggerContext getContext(final String fqcn, final ClassLoader 
loader, final boolean currentContext) {
         final LoggerContext ctx = ContextAnchor.THREAD_CONTEXT.get();
-        return ctx != null ? ctx : CONTEXT;
+        return ctx != null ? ctx : defaultLoggerContext.get();
     }
 
 
@@ -58,11 +58,11 @@ public class BasicContextSelector implements 
ContextSelector {
                                     final URI configLocation) {
 
         final LoggerContext ctx = ContextAnchor.THREAD_CONTEXT.get();
-        return ctx != null ? ctx : CONTEXT;
+        return ctx != null ? ctx : defaultLoggerContext.get();
     }
 
     public LoggerContext locateContext(final String name, final String 
configLocation) {
-        return CONTEXT;
+        return defaultLoggerContext.get();
     }
 
     @Override
@@ -77,9 +77,7 @@ public class BasicContextSelector implements ContextSelector {
 
     @Override
     public List<LoggerContext> getLoggerContexts() {
-        final List<LoggerContext> list = new ArrayList<>();
-        list.add(CONTEXT);
-        return Collections.unmodifiableList(list);
+        return Collections.singletonList(defaultLoggerContext.get());
     }
 
 }
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/ClassLoaderContextSelector.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/ClassLoaderContextSelector.java
index 45898b29f0..48e83e5353 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/ClassLoaderContextSelector.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/ClassLoaderContextSelector.java
@@ -32,6 +32,7 @@ import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.impl.ContextAnchor;
 import org.apache.logging.log4j.spi.LoggerContextShutdownAware;
 import org.apache.logging.log4j.status.StatusLogger;
+import org.apache.logging.log4j.util.Lazy;
 import org.apache.logging.log4j.util.StackLocatorUtil;
 
 /**
@@ -47,13 +48,14 @@ import org.apache.logging.log4j.util.StackLocatorUtil;
  */
 public class ClassLoaderContextSelector implements ContextSelector, 
LoggerContextShutdownAware {
 
-    private static final AtomicReference<LoggerContext> DEFAULT_CONTEXT = new 
AtomicReference<>();
-
     protected static final StatusLogger LOGGER = StatusLogger.getLogger();
 
     protected static final ConcurrentMap<String, 
AtomicReference<WeakReference<LoggerContext>>> CONTEXT_MAP =
             new ConcurrentHashMap<>();
 
+    private final Lazy<LoggerContext> defaultLoggerContext =
+            Lazy.lazy(() -> createContext(defaultContextName(), null));
+
     @Override
     public void shutdown(final String fqcn, final ClassLoader loader, final 
boolean currentContext,
                          final boolean allContexts) {
@@ -259,12 +261,7 @@ public class ClassLoaderContextSelector implements 
ContextSelector, LoggerContex
     }
 
     protected LoggerContext getDefault() {
-        final LoggerContext ctx = DEFAULT_CONTEXT.get();
-        if (ctx != null) {
-            return ctx;
-        }
-        DEFAULT_CONTEXT.compareAndSet(null, 
createContext(defaultContextName(), null));
-        return DEFAULT_CONTEXT.get();
+        return defaultLoggerContext.get();
     }
 
     protected String defaultContextName() {

Reply via email to