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() {