Repository: logging-log4j2
Updated Branches:
  refs/heads/master 299d46aa0 -> 6def026b7


LOG4J2-1255 extract FlowMessageFactory; LOG4J2-1284 Made default MessageFactory 
configurable.


Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/6def026b
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/6def026b
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/6def026b

Branch: refs/heads/master
Commit: 6def026b7763cda74bb1a22a58c351a2f24ce1e9
Parents: 299d46a
Author: rpopma <rpo...@apache.org>
Authored: Sat Feb 20 02:14:02 2016 +0900
Committer: rpopma <rpo...@apache.org>
Committed: Sat Feb 20 02:14:02 2016 +0900

----------------------------------------------------------------------
 .../log4j/message/AbstractMessageFactory.java   | 190 +----------------
 .../message/DefaultFlowMessageFactory.java      | 202 +++++++++++++++++++
 .../log4j/message/FlowMessageFactory.java       |  57 ++++++
 .../log4j/message/FormattedMessageFactory.java  |  10 -
 .../log4j/message/LocalizedMessageFactory.java  |  31 +--
 .../logging/log4j/message/MessageFactory.java   |  38 ----
 .../message/MessageFormatMessageFactory.java    |  13 +-
 .../message/ParameterizedMessageFactory.java    |  17 +-
 .../ParameterizedNoReferenceMessageFactory.java |  15 +-
 .../log4j/message/SimpleMessageFactory.java     |   3 +-
 .../message/StringFormatterMessageFactory.java  |  23 +--
 .../logging/log4j/spi/AbstractLogger.java       |  72 +++++--
 .../org/apache/logging/log4j/LoggerTest.java    |  13 --
 src/changes/changes.xml                         |   3 +
 src/site/xdoc/manual/configuration.xml.vm       |  10 +
 15 files changed, 350 insertions(+), 347 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6def026b/log4j-api/src/main/java/org/apache/logging/log4j/message/AbstractMessageFactory.java
----------------------------------------------------------------------
diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/AbstractMessageFactory.java
 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/AbstractMessageFactory.java
index 5e2c357..d54a225 100644
--- 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/AbstractMessageFactory.java
+++ 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/AbstractMessageFactory.java
@@ -25,193 +25,13 @@ import java.io.Serializable;
  * </p>
  */
 public abstract class AbstractMessageFactory implements MessageFactory, 
Serializable {
-
-    /**
-     * Constructs a message factory with {@code "entry"} and {@code "exit"} as 
the default flow strings.
-     */
-    public AbstractMessageFactory() {
-        this("entry", "exit");
-    }
-
-    /**
-     * Constructs a message factory with the given entry and exit strings.
-     * @param entryText the text to use for trace entry, like {@code "entry"} 
or {@code "Enter"}.
-     * @param exitText the text to use for trace exit, like {@code "exit"} or 
{@code "Exit"}.
-     * @since 2.6
-     */
-    public AbstractMessageFactory(final String entryText, final String 
exitText) {
-        super();
-        this.entryText = entryText;
-        this.exitText = exitText;
-    }
-
-    private final String entryText;
-    private final String exitText;
-
-    private static class AbstractFlowMessage implements FlowMessage {
-
-        private static final long serialVersionUID = 1L;
-        private final Message message;
-        private final String text;
-
-        AbstractFlowMessage(final String text, final Message message) {
-            this.message = message;
-            this.text = text;
-        }
-
-        @Override
-        public String getFormattedMessage() {
-            if (message != null) {
-                return text + " " + message.getFormattedMessage();
-            }
-            return text;
-        }
-
-        @Override
-        public String getFormat() {
-            if (message != null) {
-                return text + ": " + message.getFormat();
-            }
-            return text;
-        }
-
-        @Override
-        public Object[] getParameters() {
-            if (message != null) {
-                return message.getParameters();
-            }
-            return null;
-        }
-
-        @Override
-        public Throwable getThrowable() {
-            if (message != null) {
-                return message.getThrowable();
-            }
-            return null;
-        }
-
-        @Override
-        public Message getMessage() {
-            return message;
-        }
-
-        @Override
-        public String getText() {
-            return text;
-        }
-    }
-
-    private static final class SimpleEntryMessage extends AbstractFlowMessage 
implements EntryMessage {
-
-        private static final long serialVersionUID = 1L;
-
-        SimpleEntryMessage(final String entryText, final Message message) {
-            super(entryText, message);
-        }
-
-    }
-
-    private static final class SimpleExitMessage extends AbstractFlowMessage 
implements ExitMessage {
-
-        private static final long serialVersionUID = 1L;
-
-        private final Object result;
-        private final boolean isVoid;
-
-        SimpleExitMessage(final String exitText, final EntryMessage message) {
-            super(exitText, message.getMessage());
-            this.result = null;
-            isVoid = true;
-        }
-
-        SimpleExitMessage(final String exitText, final Object result, final 
EntryMessage message) {
-            super(exitText, message.getMessage());
-            this.result = result;
-            isVoid = false;
-        }
-
-        SimpleExitMessage(final String exitText, final Object result, final 
Message message) {
-            super(exitText, message);
-            this.result = result;
-            isVoid = false;
-        }
-
-        @Override
-        public String getFormattedMessage() {
-            final String formattedMessage = super.getFormattedMessage();
-            if (isVoid) {
-                return formattedMessage;
-            }
-            return formattedMessage + ": " + result;
-        }
-    }
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * Gets the entry text.
-     * @return the entry text.
-     * @since 2.6
-     */
-    public String getEntryText() {
-        return entryText;
-    }
-
-    /**
-     * Gets the exit text.
-     * @return the exit text.
-     * @since 2.6
-     */
-    public String getExitText() {
-        return exitText;
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see 
org.apache.logging.log4j.message.MessageFactory#newEntryMessage(org.apache.logging.log4j.message.Message)
-     */
-    @Override
-    public EntryMessage newEntryMessage(final Message message) {
-        return new SimpleEntryMessage(entryText, message);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see 
org.apache.logging.log4j.message.MessageFactory#newEntryMessage(org.apache.logging.log4j.message.EntryMessage)
-     */
-    @Override
-    public ExitMessage newExitMessage(final EntryMessage message) {
-        return new SimpleExitMessage(exitText, message);
-    }
+    private static final long serialVersionUID = -1307891137684031187L;
 
     /*
-     * (non-Javadoc)
-     *
-     * @see 
org.apache.logging.log4j.message.MessageFactory#newEntryMessage(java.lang.Object,
 org.apache.logging.log4j.message.EntryMessage)
-     */
-    @Override
-    public ExitMessage newExitMessage(final Object object, final EntryMessage 
message) {
-        return new SimpleExitMessage(exitText, object, message);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see 
org.apache.logging.log4j.message.MessageFactory#newEntryMessage(java.lang.Object,
 org.apache.logging.log4j.message.Message)
-     */
-    @Override
-    public ExitMessage newExitMessage(final Object object, final Message 
message) {
-        return new SimpleExitMessage(exitText, object, message);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see 
org.apache.logging.log4j.message.MessageFactory#newMessage(java.lang.Object)
-     */
+         * (non-Javadoc)
+         *
+         * @see 
org.apache.logging.log4j.message.MessageFactory#newMessage(java.lang.Object)
+         */
     @Override
     public Message newMessage(final Object message) {
         return new ObjectMessage(message);

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6def026b/log4j-api/src/main/java/org/apache/logging/log4j/message/DefaultFlowMessageFactory.java
----------------------------------------------------------------------
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
new file mode 100644
index 0000000..86b7491
--- /dev/null
+++ 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/DefaultFlowMessageFactory.java
@@ -0,0 +1,202 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+package org.apache.logging.log4j.message;
+
+import java.io.Serializable;
+
+/**
+ * Default factory for flow messages.
+ * @since 2.6
+ */
+public class DefaultFlowMessageFactory implements FlowMessageFactory, 
Serializable {
+    private static final long serialVersionUID = 8578655591131397576L;
+    private final String entryText;
+    private final String exitText;
+
+    /**
+     * Constructs a message factory with {@code "entry"} and {@code "exit"} as 
the default flow strings.
+     */
+    public DefaultFlowMessageFactory() {
+        this("entry", "exit");
+    }
+
+    /**
+     * Constructs a message factory with the given entry and exit strings.
+     * @param entryText the text to use for trace entry, like {@code "entry"} 
or {@code "Enter"}.
+     * @param exitText the text to use for trace exit, like {@code "exit"} or 
{@code "Exit"}.
+     */
+    public DefaultFlowMessageFactory(final String entryText, final String 
exitText) {
+        super();
+        this.entryText = entryText;
+        this.exitText = exitText;
+    }
+
+    private static class AbstractFlowMessage implements FlowMessage {
+
+        private static final long serialVersionUID = 1L;
+        private final Message message;
+        private final String text;
+
+        AbstractFlowMessage(final String text, final Message message) {
+            this.message = message;
+            this.text = text;
+        }
+
+        @Override
+        public String getFormattedMessage() {
+            if (message != null) {
+                return text + " " + message.getFormattedMessage();
+            }
+            return text;
+        }
+
+        @Override
+        public String getFormat() {
+            if (message != null) {
+                return text + ": " + message.getFormat();
+            }
+            return text;
+        }
+
+        @Override
+        public Object[] getParameters() {
+            if (message != null) {
+                return message.getParameters();
+            }
+            return null;
+        }
+
+        @Override
+        public Throwable getThrowable() {
+            if (message != null) {
+                return message.getThrowable();
+            }
+            return null;
+        }
+
+        @Override
+        public Message getMessage() {
+            return message;
+        }
+
+        @Override
+        public String getText() {
+            return text;
+        }
+    }
+
+    private static final class SimpleEntryMessage extends AbstractFlowMessage 
implements EntryMessage {
+
+        private static final long serialVersionUID = 1L;
+
+        SimpleEntryMessage(final String entryText, final Message message) {
+            super(entryText, message);
+        }
+
+    }
+
+    private static final class SimpleExitMessage extends AbstractFlowMessage 
implements ExitMessage {
+
+        private static final long serialVersionUID = 1L;
+
+        private final Object result;
+        private final boolean isVoid;
+
+        SimpleExitMessage(final String exitText, final EntryMessage message) {
+            super(exitText, message.getMessage());
+            this.result = null;
+            isVoid = true;
+        }
+
+        SimpleExitMessage(final String exitText, final Object result, final 
EntryMessage message) {
+            super(exitText, message.getMessage());
+            this.result = result;
+            isVoid = false;
+        }
+
+        SimpleExitMessage(final String exitText, final Object result, final 
Message message) {
+            super(exitText, message);
+            this.result = result;
+            isVoid = false;
+        }
+
+        @Override
+        public String getFormattedMessage() {
+            final String formattedMessage = super.getFormattedMessage();
+            if (isVoid) {
+                return formattedMessage;
+            }
+            return formattedMessage + ": " + result;
+        }
+    }
+
+    /**
+     * Gets the entry text.
+     * @return the entry text.
+     */
+    public String getEntryText() {
+        return entryText;
+    }
+
+    /**
+     * Gets the exit text.
+     * @return the exit text.
+     */
+    public String getExitText() {
+        return exitText;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see 
org.apache.logging.log4j.message.MessageFactory#newEntryMessage(org.apache.logging.log4j.message.Message)
+     */
+    @Override
+    public EntryMessage newEntryMessage(final Message message) {
+        return new SimpleEntryMessage(entryText, message);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see 
org.apache.logging.log4j.message.MessageFactory#newEntryMessage(org.apache.logging.log4j.message.EntryMessage)
+     */
+    @Override
+    public ExitMessage newExitMessage(final EntryMessage message) {
+        return new SimpleExitMessage(exitText, message);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see 
org.apache.logging.log4j.message.MessageFactory#newEntryMessage(java.lang.Object,
 org.apache.logging.log4j.message.EntryMessage)
+     */
+    @Override
+    public ExitMessage newExitMessage(final Object object, final EntryMessage 
message) {
+        return new SimpleExitMessage(exitText, object, message);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see 
org.apache.logging.log4j.message.MessageFactory#newEntryMessage(java.lang.Object,
 org.apache.logging.log4j.message.Message)
+     */
+    @Override
+    public ExitMessage newExitMessage(final Object object, final Message 
message) {
+        return new SimpleExitMessage(exitText, object, message);
+    }
+}

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6def026b/log4j-api/src/main/java/org/apache/logging/log4j/message/FlowMessageFactory.java
----------------------------------------------------------------------
diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/FlowMessageFactory.java
 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/FlowMessageFactory.java
new file mode 100644
index 0000000..b623098
--- /dev/null
+++ 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/FlowMessageFactory.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+package org.apache.logging.log4j.message;
+
+/**
+ * Creates flow messages. Implementations can provide different message format 
syntaxes.
+ * @since 2.6
+ */
+public interface FlowMessageFactory {
+    /**
+     * Creates a new entry message based on an existing message.
+     *
+     * @param message the original message
+     * @return the new entry message
+     */
+    EntryMessage newEntryMessage(Message message);
+
+    /**
+     * Creates a new exit message based on a return value and an existing 
message.
+     *
+     * @param object the return value.
+     * @param message the original message
+     * @return the new exit message
+     */
+    ExitMessage newExitMessage(Object object, Message message);
+
+    /**
+     * Creates a new exit message based on no return value and an existing 
entry message.
+     *
+     * @param message the original entry message
+     * @return the new exit message
+     */
+    ExitMessage newExitMessage(EntryMessage message);
+
+    /**
+     * Creates a new exit message based on a return value and an existing 
entry message.
+     *
+     * @param object the return value.
+     * @param message the original entry message
+     * @return the new exit message
+     */
+    ExitMessage newExitMessage(Object object, EntryMessage message);
+}

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6def026b/log4j-api/src/main/java/org/apache/logging/log4j/message/FormattedMessageFactory.java
----------------------------------------------------------------------
diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/FormattedMessageFactory.java
 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/FormattedMessageFactory.java
index 48f75d2..2e36269 100644
--- 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/FormattedMessageFactory.java
+++ 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/FormattedMessageFactory.java
@@ -29,16 +29,6 @@ public class FormattedMessageFactory extends 
AbstractMessageFactory {
         super();
     }
 
-    /**
-     * Constructs a message factory with the given entry and exit strings.
-     * @param entryText the text to use for trace entry, like {@code "entry"} 
or {@code "Enter"}.
-     * @param exitText the text to use for trace exit, like {@code "exit"} or 
{@code "Exit"}.
-     * @since 2.6
-     */
-    public FormattedMessageFactory(final String entryText, final String 
exitText) {
-        super(entryText, exitText);
-    }
-
     private static final long serialVersionUID = 1L;
 
     /**

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6def026b/log4j-api/src/main/java/org/apache/logging/log4j/message/LocalizedMessageFactory.java
----------------------------------------------------------------------
diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/LocalizedMessageFactory.java
 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/LocalizedMessageFactory.java
index 47fa516..55871ab 100644
--- 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/LocalizedMessageFactory.java
+++ 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/LocalizedMessageFactory.java
@@ -23,8 +23,7 @@ import java.util.ResourceBundle;
  * {@link #newMessage(String, Object...)}.
  */
 public class LocalizedMessageFactory extends AbstractMessageFactory {
-
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = -1996295808703146741L;
 
     // FIXME: cannot use ResourceBundle name for serialization until Java 8
     private transient final ResourceBundle resourceBundle;
@@ -35,38 +34,14 @@ public class LocalizedMessageFactory extends 
AbstractMessageFactory {
         this.baseName = null;
     }
 
-    /**
-     * Constructs a message factory with the given entry and exit strings.
-     * @param entryText the text to use for trace entry, like {@code "entry"} 
or {@code "Enter"}.
-     * @param exitText the text to use for trace exit, like {@code "exit"} or 
{@code "Exit"}.
-     * @since 2.6
-     */
-    public LocalizedMessageFactory(final ResourceBundle resourceBundle, final 
String entryText, final String exitText) {
-        super(entryText, exitText);
-        this.resourceBundle = resourceBundle;
-        this.baseName = null;
-    }
-
     public LocalizedMessageFactory(final String baseName) {
         this.resourceBundle = null;
         this.baseName = baseName;
     }
 
     /**
-     * Constructs a message factory with the given entry and exit strings.
-     * @param entryText the text to use for trace entry, like {@code "entry"} 
or {@code "Enter"}.
-     * @param exitText the text to use for trace exit, like {@code "exit"} or 
{@code "Exit"}.
-     * @since 2.6
-     */
-    public LocalizedMessageFactory(final String baseName, final String 
entryText, final String exitText) {
-        super(entryText, exitText);
-        this.resourceBundle = null;
-        this.baseName = baseName;
-    }
-
-    /**
      * Gets the resource bundle base name if set.
-     * 
+     *
      * @return the resource bundle base name if set. May be null.
      */
     public String getBaseName() {
@@ -75,7 +50,7 @@ public class LocalizedMessageFactory extends 
AbstractMessageFactory {
 
     /**
      * Gets the resource bundle if set.
-     * 
+     *
      * @return the resource bundle if set. May be null.
      */
     public ResourceBundle getResourceBundle() {

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6def026b/log4j-api/src/main/java/org/apache/logging/log4j/message/MessageFactory.java
----------------------------------------------------------------------
diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/MessageFactory.java 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/MessageFactory.java
index 3382deb..009d5a6 100644
--- 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/MessageFactory.java
+++ 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/MessageFactory.java
@@ -54,42 +54,4 @@ public interface MessageFactory {
      * @see StringFormatterMessageFactory
      */
     Message newMessage(String message, Object... params);
-
-    /**
-     * Creates a new entry message based on an existing message.
-     * 
-     * @param message the original message
-     * @return the new entry message
-     * @since 2.6
-     */
-    EntryMessage newEntryMessage(Message message);
-
-    /**
-     * Creates a new exit message based on a return value and an existing 
message.
-     * 
-     * @param object the return value. 
-     * @param message the original message
-     * @return the new exit message
-     * @since 2.6
-     */
-    ExitMessage newExitMessage(Object object, Message message);
-
-    /**
-     * Creates a new exit message based on no return value and an existing 
entry message.
-     * 
-     * @param message the original entry message
-     * @return the new exit message
-     * @since 2.6
-     */
-    ExitMessage newExitMessage(EntryMessage message);
-
-    /**
-     * Creates a new exit message based on a return value and an existing 
entry message.
-     * 
-     * @param object the return value. 
-     * @param message the original entry message
-     * @return the new exit message
-     * @since 2.6
-     */
-    ExitMessage newExitMessage(Object object, EntryMessage message);
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6def026b/log4j-api/src/main/java/org/apache/logging/log4j/message/MessageFormatMessageFactory.java
----------------------------------------------------------------------
diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/MessageFormatMessageFactory.java
 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/MessageFormatMessageFactory.java
index bf13113..a13543a 100644
--- 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/MessageFormatMessageFactory.java
+++ 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/MessageFormatMessageFactory.java
@@ -21,6 +21,7 @@ package org.apache.logging.log4j.message;
  * {@link #newMessage(String, Object...)}.
  */
 public class MessageFormatMessageFactory extends AbstractMessageFactory {
+    private static final long serialVersionUID = 3584821740584192453L;
 
     /**
      * Constructs a message factory with default flow strings.
@@ -30,18 +31,6 @@ public class MessageFormatMessageFactory extends 
AbstractMessageFactory {
     }
 
     /**
-     * Constructs a message factory with the given entry and exit strings.
-     * @param entryText the text to use for trace entry, like {@code "entry"} 
or {@code "Enter"}.
-     * @param exitText the text to use for trace exit, like {@code "exit"} or 
{@code "Exit"}.
-     * @since 2.6
-     */
-    public MessageFormatMessageFactory(final String entryText, final String 
exitText) {
-        super(entryText, exitText);
-    }
-
-    private static final long serialVersionUID = 1L;
-
-    /**
      * Creates {@link org.apache.logging.log4j.message.StringFormattedMessage} 
instances.
      * @param message The message pattern.
      * @param params Parameters to the message.

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6def026b/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterizedMessageFactory.java
----------------------------------------------------------------------
diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterizedMessageFactory.java
 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterizedMessageFactory.java
index 186554d..216e4ea 100644
--- 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterizedMessageFactory.java
+++ 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterizedMessageFactory.java
@@ -26,34 +26,23 @@ package org.apache.logging.log4j.message;
  * </p>
  */
 public final class ParameterizedMessageFactory extends AbstractMessageFactory {
+    private static final long serialVersionUID = -8970940216592525651L;
 
     /**
-     * Constructs a message factory with default flow strings.
+     * Constructs a message factory.
      */
     public ParameterizedMessageFactory() {
         super();
     }
 
     /**
-     * Constructs a message factory with the given entry and exit strings.
-     * @param entryText the text to use for trace entry, like {@code "entry"} 
or {@code "Enter"}.
-     * @param exitText the text to use for trace exit, like {@code "exit"} or 
{@code "Exit"}.
-     * @since 2.6
-     */
-    public ParameterizedMessageFactory(final String entryText, final String 
exitText) {
-        super(entryText, exitText);
-    }
-
-    /**
      * Instance of StringFormatterMessageFactory.
      */
     public static final ParameterizedMessageFactory INSTANCE = new 
ParameterizedMessageFactory();
 
-    private static final long serialVersionUID = 1L;
-
     /**
      * Creates {@link ParameterizedMessage} instances.
-     * 
+     *
      * @param message The message pattern.
      * @param params The message parameters.
      * @return The Message.

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6def026b/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterizedNoReferenceMessageFactory.java
----------------------------------------------------------------------
diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterizedNoReferenceMessageFactory.java
 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterizedNoReferenceMessageFactory.java
index 9d03ef8..80349ed 100644
--- 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterizedNoReferenceMessageFactory.java
+++ 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterizedNoReferenceMessageFactory.java
@@ -30,6 +30,7 @@ import org.apache.logging.log4j.status.StatusLogger;
  * </p>
  */
 public final class ParameterizedNoReferenceMessageFactory extends 
AbstractMessageFactory {
+    private static final long serialVersionUID = 5027639245636870500L;
 
     /**
      * Constructs a message factory with default flow strings.
@@ -39,25 +40,13 @@ public final class ParameterizedNoReferenceMessageFactory 
extends AbstractMessag
     }
 
     /**
-     * Constructs a message factory with the given entry and exit strings.
-     * @param entryText the text to use for trace entry, like {@code "entry"} 
or {@code "Enter"}.
-     * @param exitText the text to use for trace exit, like {@code "exit"} or 
{@code "Exit"}.
-     * @since 2.6
-     */
-    public ParameterizedNoReferenceMessageFactory(final String entryText, 
final String exitText) {
-        super(entryText, exitText);
-    }
-
-    /**
      * Instance of ParameterizedStatusMessageFactory.
      */
     public static final ParameterizedNoReferenceMessageFactory INSTANCE = new 
ParameterizedNoReferenceMessageFactory();
 
-    private static final long serialVersionUID = 1L;
-
     /**
      * Creates {@link SimpleMessage} instances containing the formatted 
parameterized message string.
-     * 
+     *
      * @param message The message pattern.
      * @param params The message parameters.
      * @return The Message.

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6def026b/log4j-api/src/main/java/org/apache/logging/log4j/message/SimpleMessageFactory.java
----------------------------------------------------------------------
diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/SimpleMessageFactory.java
 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/SimpleMessageFactory.java
index d32b2c4..9020538 100644
--- 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/SimpleMessageFactory.java
+++ 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/SimpleMessageFactory.java
@@ -33,8 +33,7 @@ public final class SimpleMessageFactory extends 
AbstractMessageFactory {
      * Instance of StringFormatterMessageFactory.
      */
     public static final SimpleMessageFactory INSTANCE = new 
SimpleMessageFactory();
-
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 4418995198790088516L;
 
     /**
      * Creates {@link StringFormattedMessage} instances.

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6def026b/log4j-api/src/main/java/org/apache/logging/log4j/message/StringFormatterMessageFactory.java
----------------------------------------------------------------------
diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/StringFormatterMessageFactory.java
 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/StringFormatterMessageFactory.java
index cb9b6ed..b4d6bf2 100644
--- 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/StringFormatterMessageFactory.java
+++ 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/StringFormatterMessageFactory.java
@@ -28,30 +28,19 @@ package org.apache.logging.log4j.message;
 public final class StringFormatterMessageFactory extends 
AbstractMessageFactory {
 
     /**
-     * Constructs a message factory with default flow strings.
+     * Instance of StringFormatterMessageFactory.
      */
-    public StringFormatterMessageFactory() {
-        super();
-    }
+    public static final StringFormatterMessageFactory INSTANCE = new 
StringFormatterMessageFactory();
+    private static final long serialVersionUID = -1626332412176965642L;
 
     /**
-     * Constructs a message factory with the given entry and exit strings.
-     * @param entryText the text to use for trace entry, like {@code "entry"} 
or {@code "Enter"}.
-     * @param exitText the text to use for trace exit, like {@code "exit"} or 
{@code "Exit"}.
-     * @since 2.6
+     * Constructs a message factory with default flow strings.
      */
-    public StringFormatterMessageFactory(final String entryText, final String 
exitText) {
-        super(entryText, exitText);
+    public StringFormatterMessageFactory() {
+        super();
     }
 
     /**
-     * Instance of StringFormatterMessageFactory.
-     */
-    public static final StringFormatterMessageFactory INSTANCE = new 
StringFormatterMessageFactory();
-
-    private static final long serialVersionUID = 1L;
-
-    /**
      * Creates {@link StringFormattedMessage} instances.
      *
      * @param message The message pattern.

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6def026b/log4j-api/src/main/java/org/apache/logging/log4j/spi/AbstractLogger.java
----------------------------------------------------------------------
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 3d3f57d..4fac04d 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
@@ -16,12 +16,12 @@
  */
 package org.apache.logging.log4j.spi;
 
-import java.io.Serializable;
-
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.Marker;
 import org.apache.logging.log4j.MarkerManager;
+import org.apache.logging.log4j.message.DefaultFlowMessageFactory;
 import org.apache.logging.log4j.message.EntryMessage;
+import org.apache.logging.log4j.message.FlowMessageFactory;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.MessageFactory;
 import org.apache.logging.log4j.message.ParameterizedMessageFactory;
@@ -29,9 +29,12 @@ import 
org.apache.logging.log4j.message.StringFormattedMessage;
 import org.apache.logging.log4j.status.StatusLogger;
 import org.apache.logging.log4j.util.LambdaUtil;
 import org.apache.logging.log4j.util.MessageSupplier;
+import org.apache.logging.log4j.util.PropertiesUtil;
 import org.apache.logging.log4j.util.Strings;
 import org.apache.logging.log4j.util.Supplier;
 
+import java.io.Serializable;
+
 /**
  * Base implementation of a Logger. It is highly recommended that any Logger 
implementation extend this class.
  */
@@ -71,7 +74,13 @@ public abstract class AbstractLogger implements 
ExtendedLogger, Serializable {
      * The default MessageFactory class.
      */
     public static final Class<? extends MessageFactory> 
DEFAULT_MESSAGE_FACTORY_CLASS =
-            ParameterizedMessageFactory.class;
+            createClassForProperty("log4j2.messageFactory", 
ParameterizedMessageFactory.class);
+
+    /**
+     * The default FlowMessageFactory class.
+     */
+    public static final Class<? extends FlowMessageFactory> 
DEFAULT_FLOW_MESSAGE_FACTORY_CLASS =
+            createFlowClassForProperty("log4j2.flowMessageFactory", 
DefaultFlowMessageFactory.class);
 
     private static final long serialVersionUID = 2L;
 
@@ -81,6 +90,7 @@ public abstract class AbstractLogger implements 
ExtendedLogger, Serializable {
 
     private final String name;
     private final MessageFactory messageFactory;
+    private final FlowMessageFactory flowMessageFactory;
 
     /**
      * Creates a new logger named after this class (or subclass).
@@ -88,6 +98,7 @@ public abstract class AbstractLogger implements 
ExtendedLogger, Serializable {
     public AbstractLogger() {
         this.name = getClass().getName();
         this.messageFactory = createDefaultMessageFactory();
+        this.flowMessageFactory = createDefaultFlowMessageFactory();
     }
 
     /**
@@ -96,8 +107,7 @@ public abstract class AbstractLogger implements 
ExtendedLogger, Serializable {
      * @param name the logger name
      */
     public AbstractLogger(final String name) {
-        this.name = name;
-        this.messageFactory = createDefaultMessageFactory();
+        this(name, createDefaultMessageFactory());
     }
 
     /**
@@ -109,6 +119,7 @@ public abstract class AbstractLogger implements 
ExtendedLogger, Serializable {
     public AbstractLogger(final String name, final MessageFactory 
messageFactory) {
         this.name = name;
         this.messageFactory = messageFactory == null ? 
createDefaultMessageFactory() : messageFactory;
+        this.flowMessageFactory = createDefaultFlowMessageFactory();
     }
 
     /**
@@ -166,7 +177,27 @@ public abstract class AbstractLogger implements 
ExtendedLogger, Serializable {
         return messageFactory.newMessage(CATCHING);
     }
 
-    private MessageFactory createDefaultMessageFactory() {
+    private static Class<? extends MessageFactory> 
createClassForProperty(final String property,
+            final Class<ParameterizedMessageFactory> 
defaultMessageFactoryClass) {
+        try {
+            final String clsName = System.getProperty(property, 
defaultMessageFactoryClass.getName());
+            return 
Class.forName(clsName).asSubclass(ParameterizedMessageFactory.class);
+        } catch (final Throwable t) {
+            return defaultMessageFactoryClass;
+        }
+    }
+
+    private static Class<? extends FlowMessageFactory> 
createFlowClassForProperty(final String property,
+            final Class<DefaultFlowMessageFactory> 
defaultFlowMessageFactoryClass) {
+        try {
+            final String clsName = System.getProperty(property, 
defaultFlowMessageFactoryClass.getName());
+            return Class.forName(clsName).asSubclass(FlowMessageFactory.class);
+        } catch (final Throwable t) {
+            return defaultFlowMessageFactoryClass;
+        }
+    }
+
+    private static MessageFactory createDefaultMessageFactory() {
         try {
             return DEFAULT_MESSAGE_FACTORY_CLASS.newInstance();
         } catch (final InstantiationException e) {
@@ -176,6 +207,16 @@ public abstract class AbstractLogger implements 
ExtendedLogger, Serializable {
         }
     }
 
+    private static FlowMessageFactory createDefaultFlowMessageFactory() {
+        try {
+            return DEFAULT_FLOW_MESSAGE_FACTORY_CLASS.newInstance();
+        } catch (final InstantiationException e) {
+            throw new IllegalStateException(e);
+        } catch (final IllegalAccessException e) {
+            throw new IllegalStateException(e);
+        }
+    }
+
     @Override
     public void debug(final Marker marker, final Message msg) {
         logIfEnabled(FQCN, Level.DEBUG, marker, msg, null);
@@ -350,7 +391,8 @@ public abstract class AbstractLogger implements 
ExtendedLogger, Serializable {
     protected EntryMessage enter(final String fqcn, final MessageSupplier 
msgSupplier) {
         EntryMessage message = null;
         if (isEnabled(Level.TRACE, ENTRY_MARKER, (Object) null, null)) {
-            logMessage(fqcn, Level.TRACE, ENTRY_MARKER, message = 
messageFactory.newEntryMessage(msgSupplier.get()), null);
+            logMessage(fqcn, Level.TRACE, ENTRY_MARKER, message = 
flowMessageFactory.newEntryMessage(
+                    msgSupplier.get()), null);
         }
         return message;
     }
@@ -385,12 +427,12 @@ public abstract class AbstractLogger implements 
ExtendedLogger, Serializable {
         final int count = params == null ? 0 : params.length;
         if (count == 0) {
             if (Strings.isEmpty(format)) {
-                return messageFactory.newEntryMessage(null);
+                return flowMessageFactory.newEntryMessage(null);
             }
-            return 
messageFactory.newEntryMessage(messageFactory.newMessage(format));
+            return 
flowMessageFactory.newEntryMessage(messageFactory.newMessage(format));
         }
         if (format != null) {
-            return 
messageFactory.newEntryMessage(messageFactory.newMessage(format, params));
+            return 
flowMessageFactory.newEntryMessage(messageFactory.newMessage(format, params));
         }
         final StringBuilder sb = new StringBuilder();
         sb.append("params(");
@@ -402,7 +444,7 @@ public abstract class AbstractLogger implements 
ExtendedLogger, Serializable {
             sb.append(parm instanceof Message ? ((Message) 
parm).getFormattedMessage() : String.valueOf(parm));
         }
         sb.append(')');
-        return 
messageFactory.newEntryMessage(messageFactory.newMessage(sb.toString()));
+        return 
flowMessageFactory.newEntryMessage(messageFactory.newMessage(sb.toString()));
     }
 
     protected EntryMessage entryMsg(final String format, final 
MessageSupplier... paramSuppliers) {
@@ -1368,7 +1410,7 @@ public abstract class AbstractLogger implements 
ExtendedLogger, Serializable {
             logMessage(FQCN, Level.TRACE, EXIT_MARKER, new MessageSupplier() {
                 @Override
                 public Message get() {
-                    return messageFactory.newExitMessage(result, 
messageSupplier.get());
+                    return flowMessageFactory.newExitMessage(result, 
messageSupplier.get());
                 };
             }, null);
         }
@@ -1381,7 +1423,7 @@ public abstract class AbstractLogger implements 
ExtendedLogger, Serializable {
             logMessage(FQCN, Level.TRACE, EXIT_MARKER, new MessageSupplier() {
                 @Override
                 public Message get() {
-                    return messageFactory.newExitMessage(message);
+                    return flowMessageFactory.newExitMessage(message);
                 };
             }, null);
         }
@@ -1393,7 +1435,7 @@ public abstract class AbstractLogger implements 
ExtendedLogger, Serializable {
             logMessage(FQCN, Level.TRACE, EXIT_MARKER, new MessageSupplier() {
                 @Override
                 public Message get() {
-                    return messageFactory.newExitMessage(result, message);
+                    return flowMessageFactory.newExitMessage(result, message);
                 };
             }, null);
         }
@@ -1406,7 +1448,7 @@ public abstract class AbstractLogger implements 
ExtendedLogger, Serializable {
             logMessage(FQCN, Level.TRACE, EXIT_MARKER, new MessageSupplier() {
                 @Override
                 public Message get() {
-                    return messageFactory.newExitMessage(result, message);
+                    return flowMessageFactory.newExitMessage(result, message);
                 };
             }, null);
         }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6def026b/log4j-api/src/test/java/org/apache/logging/log4j/LoggerTest.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/LoggerTest.java 
b/log4j-api/src/test/java/org/apache/logging/log4j/LoggerTest.java
index ba452ff..edd92af 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/LoggerTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/LoggerTest.java
@@ -142,19 +142,6 @@ public class LoggerTest {
     }
 
     @Test
-    public void flowTracingString_ObjectArray2_ParameterizedMessageFactory() {
-        TestLogger myLogger = (TestLogger) 
LogManager.getLogger("LoggerTestWithCustomParameterizedMessageFactory", new 
ParameterizedMessageFactory("Enter", "Exit"));
-        EntryMessage msg = myLogger.traceEntry("doFoo(a={}, b={})", 1, 2);
-        myLogger.traceExit(msg, 3);
-        final List<String> entries = myLogger.getEntries();
-        assertEquals(2, entries.size());
-        assertThat("Incorrect Entry", entries.get(0), startsWith("ENTRY[ FLOW 
] TRACE Enter"));
-        assertThat("Missing entry data", entries.get(0), 
containsString("doFoo(a=1, b=2)"));
-        assertThat("Incorrect Exit", entries.get(1), startsWith("EXIT[ FLOW ] 
TRACE Exit"));
-        assertThat("Missing exit data", entries.get(1), 
containsString("doFoo(a=1, b=2): 3"));
-    }
-
-    @Test
     public void flowTracingNoExitArgs() {
         logger.traceEntry();
         logger.traceExit();

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6def026b/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index a006907..77dd213 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -24,6 +24,9 @@
   </properties>
   <body>
     <release version="2.6" date="201Y-MM-DD" description="GA Release 2.6">
+      <action issue="LOG4J2-1284" dev="rpopma" type="fix">
+        Made default MessageFactory configurable.
+      </action>
       <action issue="LOG4J2-1281" dev="rpopma" type="fix">
         LoggerConfig.getProperties() should not allocate on each call.
       </action>

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6def026b/src/site/xdoc/manual/configuration.xml.vm
----------------------------------------------------------------------
diff --git a/src/site/xdoc/manual/configuration.xml.vm 
b/src/site/xdoc/manual/configuration.xml.vm
index ee14ce0..18367eb 100644
--- a/src/site/xdoc/manual/configuration.xml.vm
+++ b/src/site/xdoc/manual/configuration.xml.vm
@@ -1903,6 +1903,16 @@ public class AwesomeTest {
       This property only has effect if <tt>Discard</tt> is specified as the
       <tt>log4j2.AsyncEventRouter</tt>.</td>
   </tr>
+  <tr>
+    <td>log4j2.messageFactory</td>
+    <td>org.apache.logging.log4j.message. ParameterizedMessageFactory</td>
+    <td>Default message factory used by Loggers if no factory was 
specified.</td>
+  </tr>
+  <tr>
+    <td>log4j2.flowMessageFactory</td>
+    <td>org.apache.logging.log4j.message. DefaultFlowMessageFactory</td>
+    <td>Default flow message factory used by Loggers.</td>
+  </tr>
 </table>
 
         </subsection>

Reply via email to