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

pkarwasz pushed a commit to branch fix/backport-log4j3-api
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit d79ea661f4e79c6dc836af021f0ff4659695c7a8
Author: Piotr P. Karwasz <[email protected]>
AuthorDate: Fri Mar 15 14:29:50 2024 +0100

    Make default message factories GraalVM friendly
---
 .../log4j/message/DefaultFlowMessageFactory.java   | 22 ++++++++++++++--------
 .../apache/logging/log4j/spi/AbstractLogger.java   | 14 ++------------
 2 files changed, 16 insertions(+), 20 deletions(-)

diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/DefaultFlowMessageFactory.java
 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/DefaultFlowMessageFactory.java
index 1c6fcd3f45..3ca2aeba41 100644
--- 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/DefaultFlowMessageFactory.java
+++ 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/DefaultFlowMessageFactory.java
@@ -17,8 +17,7 @@
 package org.apache.logging.log4j.message;
 
 import java.io.Serializable;
-import org.apache.logging.log4j.spi.AbstractLogger;
-import org.apache.logging.log4j.util.LoaderUtil;
+import java.util.Objects;
 import org.apache.logging.log4j.util.StringBuilderFormattable;
 import org.apache.logging.log4j.util.StringBuilders;
 import org.apache.logging.log4j.util.Strings;
@@ -34,6 +33,8 @@ public class DefaultFlowMessageFactory implements 
FlowMessageFactory, Serializab
     private static final String ENTRY_DEFAULT_PREFIX = "Enter";
     private static final long serialVersionUID = 8578655591131397576L;
 
+    public static final FlowMessageFactory INSTANCE = new 
DefaultFlowMessageFactory();
+
     private final String entryText;
     private final String exitText;
     private final MessageFactory messageFactory;
@@ -51,17 +52,22 @@ public class DefaultFlowMessageFactory implements 
FlowMessageFactory, Serializab
      * @param exitText the text to use for trace exit, like {@code "Exit"}.
      */
     public DefaultFlowMessageFactory(final String entryText, final String 
exitText) {
+        this(entryText, exitText, createDefaultMessageFactory());
+    }
+
+    public DefaultFlowMessageFactory(final MessageFactory messageFactory) {
+        this(ENTRY_DEFAULT_PREFIX, EXIT_DEFAULT_PREFIX, 
Objects.requireNonNull(messageFactory));
+    }
+
+    private DefaultFlowMessageFactory(
+            final String entryText, final String exitText, final 
MessageFactory messageFactory) {
         this.entryText = entryText;
         this.exitText = exitText;
-        this.messageFactory = createDefaultMessageFactory();
+        this.messageFactory = messageFactory;
     }
 
     private static MessageFactory createDefaultMessageFactory() {
-        try {
-            return 
LoaderUtil.newInstanceOf(AbstractLogger.DEFAULT_MESSAGE_FACTORY_CLASS);
-        } catch (final ReflectiveOperationException e) {
-            throw new IllegalStateException(e);
-        }
+        return ParameterizedMessageFactory.INSTANCE;
     }
 
     private static class AbstractFlowMessage implements FlowMessage, 
StringBuilderFormattable {
diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/spi/AbstractLogger.java 
b/log4j-api/src/main/java/org/apache/logging/log4j/spi/AbstractLogger.java
index d9543f17b5..30d0cffef0 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/spi/AbstractLogger.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/spi/AbstractLogger.java
@@ -35,7 +35,6 @@ import 
org.apache.logging.log4j.message.StringFormattedMessage;
 import org.apache.logging.log4j.status.StatusLogger;
 import org.apache.logging.log4j.util.Constants;
 import org.apache.logging.log4j.util.LambdaUtil;
-import org.apache.logging.log4j.util.LoaderUtil;
 import org.apache.logging.log4j.util.MessageSupplier;
 import org.apache.logging.log4j.util.PerformanceSensitive;
 import org.apache.logging.log4j.util.StackLocatorUtil;
@@ -198,12 +197,7 @@ public abstract class AbstractLogger implements 
ExtendedLogger, LocationAwareLog
     }
 
     private static MessageFactory2 createDefaultMessageFactory() {
-        try {
-            final MessageFactory result = 
LoaderUtil.newInstanceOf(DEFAULT_MESSAGE_FACTORY_CLASS);
-            return narrow(result);
-        } catch (final ReflectiveOperationException e) {
-            throw new IllegalStateException(e);
-        }
+        return ParameterizedMessageFactory.INSTANCE;
     }
 
     private static MessageFactory2 narrow(final MessageFactory result) {
@@ -214,11 +208,7 @@ public abstract class AbstractLogger implements 
ExtendedLogger, LocationAwareLog
     }
 
     private static FlowMessageFactory createDefaultFlowMessageFactory() {
-        try {
-            return 
LoaderUtil.newInstanceOf(DEFAULT_FLOW_MESSAGE_FACTORY_CLASS);
-        } catch (final ReflectiveOperationException e) {
-            throw new IllegalStateException(e);
-        }
+        return DefaultFlowMessageFactory.INSTANCE;
     }
 
     @Override

Reply via email to