You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2022/03/31 05:49:53 UTC

[logging-log4j2] 03/07: Make JmxRuntimeInputArgumentsLookup a lazy singleton

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

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

commit 4419e66408cc1cb965a2df02fcbf75eb4f5c5e38
Author: Matt Sicker <ma...@apache.org>
AuthorDate: Wed Mar 30 21:53:15 2022 -0500

    Make JmxRuntimeInputArgumentsLookup a lazy singleton
    
    Signed-off-by: Matt Sicker <ma...@apache.org>
---
 .../core/lookup/MainInputArgumentsJmxLookupTest.java |  6 +++---
 .../core/lookup/JmxRuntimeInputArgumentsLookup.java  | 20 +++++++++++++-------
 2 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/lookup/MainInputArgumentsJmxLookupTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/lookup/MainInputArgumentsJmxLookupTest.java
index a3106a1..16b1a31 100644
--- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/lookup/MainInputArgumentsJmxLookupTest.java
+++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/lookup/MainInputArgumentsJmxLookupTest.java
@@ -18,7 +18,7 @@ package org.apache.logging.log4j.core.lookup;
 
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * Tests {@link JmxRuntimeInputArgumentsLookup} from the command line, not a JUnit test.
@@ -35,14 +35,14 @@ public class MainInputArgumentsJmxLookupTest {
 
     @Test
     public void testMap() {
-        final JmxRuntimeInputArgumentsLookup lookup = JmxRuntimeInputArgumentsLookup.JMX_SINGLETON;
+        final JmxRuntimeInputArgumentsLookup lookup = JmxRuntimeInputArgumentsLookup.getInstance();
         assertNull(lookup.lookup(null));
         assertNull(lookup.lookup("X"));
         assertNull(lookup.lookup("foo.txt"));
     }
 
     public void callFromMain() {
-        final JmxRuntimeInputArgumentsLookup lookup = JmxRuntimeInputArgumentsLookup.JMX_SINGLETON;
+        final JmxRuntimeInputArgumentsLookup lookup = JmxRuntimeInputArgumentsLookup.getInstance();
         assertNull(lookup.lookup(null));
         assertNull(lookup.lookup("X"));
         // Eclipse adds -Dfile.encoding=Cp1252
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/JmxRuntimeInputArgumentsLookup.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/JmxRuntimeInputArgumentsLookup.java
index 2e3c5b0..3e90516 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/JmxRuntimeInputArgumentsLookup.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/JmxRuntimeInputArgumentsLookup.java
@@ -16,12 +16,15 @@
  */
 package org.apache.logging.log4j.core.lookup;
 
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.plugins.Plugin;
+import org.apache.logging.log4j.plugins.PluginFactory;
+import org.apache.logging.log4j.util.LazyValue;
+
 import java.lang.management.ManagementFactory;
 import java.util.List;
 import java.util.Map;
-
-import org.apache.logging.log4j.core.LogEvent;
-import org.apache.logging.log4j.plugins.Plugin;
+import java.util.function.Supplier;
 
 /**
  * Maps JVM input arguments (but not main arguments) using JMX to acquire JVM arguments.
@@ -32,12 +35,15 @@ import org.apache.logging.log4j.plugins.Plugin;
 @Plugin(name = "jvmrunargs", category = StrLookup.CATEGORY)
 public class JmxRuntimeInputArgumentsLookup extends MapLookup {
 
-    static {
+    private static final Supplier<JmxRuntimeInputArgumentsLookup> INSTANCE = LazyValue.from(() -> {
         final List<String> argsList = ManagementFactory.getRuntimeMXBean().getInputArguments();
-        JMX_SINGLETON = new JmxRuntimeInputArgumentsLookup(MapLookup.toMap(argsList));
-    }
+        return new JmxRuntimeInputArgumentsLookup(MapLookup.toMap(argsList));
+    });
 
-    public static final JmxRuntimeInputArgumentsLookup JMX_SINGLETON;
+    @PluginFactory
+    public static JmxRuntimeInputArgumentsLookup getInstance() {
+        return INSTANCE.get();
+    }
 
     /**
      * Constructor when used directly as a plugin.