Repository: logging-log4j2
Updated Branches:
  refs/heads/master dc80330b5 -> b95cc70e4


Message implementors must implement toString() to return a value that
will work as 'normal' Strings in order to play well with the Supplier
APIs like traceEnter(Supplier). Also introduce an AbstractMessage class
that JsonMessage extends. For now, the stock Message implementors do not
extend AbstractMessage because that would make reading in 2.5 serialized
Messages break. We can decide later if we want to make Message
implementors extend AbstractMessage.

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

Branch: refs/heads/master
Commit: b95cc70e41e0033a406a0a2ccda4d4bc76341ca2
Parents: dc80330
Author: ggregory <[email protected]>
Authored: Fri Feb 12 13:48:18 2016 -0800
Committer: ggregory <[email protected]>
Committed: Fri Feb 12 13:48:18 2016 -0800

----------------------------------------------------------------------
 .../logging/log4j/message/AbstractMessage.java  |  37 ++++
 .../logging/log4j/message/FormattedMessage.java |   3 +-
 .../logging/log4j/message/LocalizedMessage.java |   5 +
 .../log4j/message/MessageFormatMessage.java     |   3 +-
 .../log4j/message/ObjectArrayMessage.java       |   2 +-
 .../log4j/message/ParameterizedMessage.java     |   3 +-
 .../logging/log4j/message/SimpleMessage.java    |   2 +-
 .../log4j/message/StringFormattedMessage.java   |   3 +-
 .../log4j/message/ThreadDumpMessage.java        |   7 +-
 .../logging/log4j/LoggerSupplierTest.java       | 196 +++++++++++++++++++
 .../logging/log4j/message/JsonMessage.java      |   7 +-
 11 files changed, 246 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b95cc70e/log4j-api/src/main/java/org/apache/logging/log4j/message/AbstractMessage.java
----------------------------------------------------------------------
diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/AbstractMessage.java 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/AbstractMessage.java
new file mode 100644
index 0000000..3981515
--- /dev/null
+++ 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/AbstractMessage.java
@@ -0,0 +1,37 @@
+/*
+ * 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;
+
+/**
+ * Common services for Message implementors.
+ * 
+ * @since 2.6
+ */
+public abstract class AbstractMessage implements Message {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Converts this message to it's formatted message String.
+     * 
+     * @return this message as formatted message String.
+     */
+    @Override
+    public String toString() {
+        return getFormattedMessage();
+    }
+}

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b95cc70e/log4j-api/src/main/java/org/apache/logging/log4j/message/FormattedMessage.java
----------------------------------------------------------------------
diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/FormattedMessage.java
 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/FormattedMessage.java
index 39019d0..2e4b5c0 100644
--- 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/FormattedMessage.java
+++ 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/FormattedMessage.java
@@ -159,8 +159,7 @@ public class FormattedMessage implements Message {
 
     @Override
     public String toString() {
-        return "FormattedMessage[messagePattern=" + messagePattern + ", args=" 
+
-            Arrays.toString(argArray) + ']';
+        return getFormattedMessage();
     }
 
     private void writeObject(final ObjectOutputStream out) throws IOException {

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b95cc70e/log4j-api/src/main/java/org/apache/logging/log4j/message/LocalizedMessage.java
----------------------------------------------------------------------
diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/LocalizedMessage.java
 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/LocalizedMessage.java
index c071a20..93d8d3a 100644
--- 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/LocalizedMessage.java
+++ 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/LocalizedMessage.java
@@ -255,6 +255,11 @@ public class LocalizedMessage implements Message, 
LoggerNameAwareMessage {
         return rb;
     }
 
+    @Override
+    public String toString() {
+        return getFormattedMessage();
+    }
+
     private void writeObject(final ObjectOutputStream out) throws IOException {
         out.defaultWriteObject();
         getFormattedMessage();

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b95cc70e/log4j-api/src/main/java/org/apache/logging/log4j/message/MessageFormatMessage.java
----------------------------------------------------------------------
diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/MessageFormatMessage.java
 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/MessageFormatMessage.java
index 705aed9..9660707 100644
--- 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/MessageFormatMessage.java
+++ 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/MessageFormatMessage.java
@@ -125,8 +125,7 @@ public class MessageFormatMessage implements Message {
 
     @Override
     public String toString() {
-        return "StringFormatMessage[messagePattern=" + messagePattern + ", 
args=" +
-            Arrays.toString(parameters) + ']';
+        return getFormattedMessage();
     }
 
     private void writeObject(final ObjectOutputStream out) throws IOException {

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b95cc70e/log4j-api/src/main/java/org/apache/logging/log4j/message/ObjectArrayMessage.java
----------------------------------------------------------------------
diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/ObjectArrayMessage.java
 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/ObjectArrayMessage.java
index 729d9c5..71eb736 100644
--- 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/ObjectArrayMessage.java
+++ 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/ObjectArrayMessage.java
@@ -124,7 +124,7 @@ public final class ObjectArrayMessage implements Message {
 
     @Override
     public String toString() {
-        return "ObjectArrayMessage[obj=" + getFormattedMessage() + ']';
+        return getFormattedMessage();
     }
 
     private void writeObject(final ObjectOutputStream out) throws IOException {

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b95cc70e/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterizedMessage.java
----------------------------------------------------------------------
diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterizedMessage.java
 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterizedMessage.java
index 8d61abb..334e19b 100644
--- 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterizedMessage.java
+++ 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterizedMessage.java
@@ -750,7 +750,6 @@ public class ParameterizedMessage implements Message {
 
     @Override
     public String toString() {
-        return "ParameterizedMessage[messagePattern=" + messagePattern + ", 
stringArgs=" +
-            Arrays.toString(stringArgs) + ", throwable=" + throwable + ']';
+        return getFormattedMessage();
     }
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b95cc70e/log4j-api/src/main/java/org/apache/logging/log4j/message/SimpleMessage.java
----------------------------------------------------------------------
diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/SimpleMessage.java 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/SimpleMessage.java
index 31479bb..de3b769 100644
--- 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/SimpleMessage.java
+++ 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/SimpleMessage.java
@@ -87,7 +87,7 @@ public class SimpleMessage implements Message {
 
     @Override
     public String toString() {
-        return "SimpleMessage[message=" + message + ']';
+        return getFormattedMessage();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b95cc70e/log4j-api/src/main/java/org/apache/logging/log4j/message/StringFormattedMessage.java
----------------------------------------------------------------------
diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/StringFormattedMessage.java
 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/StringFormattedMessage.java
index 838023c..9881c96 100644
--- 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/StringFormattedMessage.java
+++ 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/StringFormattedMessage.java
@@ -120,8 +120,7 @@ public class StringFormattedMessage implements Message {
 
     @Override
     public String toString() {
-        return "StringFormatMessage[messagePattern=" + messagePattern + ", 
args=" +
-            Arrays.toString(argArray) + ']';
+        return getFormattedMessage();
     }
 
     private void writeObject(final ObjectOutputStream out) throws IOException {

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b95cc70e/log4j-api/src/main/java/org/apache/logging/log4j/message/ThreadDumpMessage.java
----------------------------------------------------------------------
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 77c15df..9e8fd7c 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
@@ -72,12 +72,7 @@ public class ThreadDumpMessage implements Message {
 
     @Override
     public String toString() {
-        final StringBuilder sb = new StringBuilder("ThreadDumpMessage[");
-        if (this.title.length() > 0) {
-            StringBuilders.appendKeyDqValue(sb, "Title", this.title);
-        }
-        sb.append(']');
-        return sb.toString();
+        return getFormattedMessage();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b95cc70e/log4j-api/src/test/java/org/apache/logging/log4j/LoggerSupplierTest.java
----------------------------------------------------------------------
diff --git 
a/log4j-api/src/test/java/org/apache/logging/log4j/LoggerSupplierTest.java 
b/log4j-api/src/test/java/org/apache/logging/log4j/LoggerSupplierTest.java
new file mode 100644
index 0000000..a8e8739
--- /dev/null
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/LoggerSupplierTest.java
@@ -0,0 +1,196 @@
+/*
+ * 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;
+
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.startsWith;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
+
+import java.util.List;
+
+import org.apache.logging.log4j.message.FormattedMessage;
+import org.apache.logging.log4j.message.JsonMessage;
+import org.apache.logging.log4j.message.LocalizedMessage;
+import org.apache.logging.log4j.message.MessageFormatMessage;
+import org.apache.logging.log4j.message.ObjectArrayMessage;
+import org.apache.logging.log4j.message.ObjectMessage;
+import org.apache.logging.log4j.message.ParameterizedMessage;
+import org.apache.logging.log4j.message.SimpleMessage;
+import org.apache.logging.log4j.message.StringFormattedMessage;
+import org.apache.logging.log4j.message.ThreadDumpMessage;
+import org.apache.logging.log4j.util.Supplier;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests Logger APIs with MessageSupplier and Supplier.
+ */
+public class LoggerSupplierTest {
+
+    private final TestLogger logger = (TestLogger) 
LogManager.getLogger("LoggerTest");
+
+    private final List<String> results = logger.getEntries();
+
+    @Test
+    public void flowTracing_SupplierOfFormattedMessage() {
+        logger.traceEntry(new Supplier<FormattedMessage>() {
+            @Override
+            public FormattedMessage get() {
+                return new FormattedMessage("int foo={}", 1234567890);
+            }
+        });
+        assertEquals(1, results.size());
+        assertThat("Incorrect Entry", results.get(0), startsWith("ENTRY[ FLOW 
] TRACE entry"));
+        assertThat("Missing entry data", results.get(0), containsString("(int 
foo=1234567890)"));
+        assertThat("Bad toString()", results.get(0), 
not(containsString("FormattedMessage")));
+    }
+
+    @Test
+    public void flowTracing_SupplierOfJsonMessage() {
+        logger.traceEntry(new Supplier<JsonMessage>() {
+            @Override
+            public JsonMessage get() {
+                return new JsonMessage(System.getProperties());
+            }
+        });
+        assertEquals(1, results.size());
+        assertThat("Incorrect Entry", results.get(0), startsWith("ENTRY[ FLOW 
] TRACE entry"));
+        assertThat("Missing entry data", results.get(0), 
containsString("\"java.runtime.name\":"));
+        assertThat("Bad toString()", results.get(0), 
not(containsString("JsonMessage")));
+    }
+
+    @Test
+    public void flowTracing_SupplierOfLocalizedMessage() {
+        logger.traceEntry(new Supplier<LocalizedMessage>() {
+            @Override
+            public LocalizedMessage get() {
+                return new LocalizedMessage("int foo={}", 1234567890);
+            }
+        });
+        assertEquals(1, results.size());
+        assertThat("Incorrect Entry", results.get(0), startsWith("ENTRY[ FLOW 
] TRACE entry"));
+        assertThat("Missing entry data", results.get(0), containsString("(int 
foo=1234567890)"));
+        assertThat("Bad toString()", results.get(0), 
not(containsString("LocalizedMessage")));
+    }
+
+    @Test
+    public void flowTracing_SupplierOfMessageFormatMessage() {
+        logger.traceEntry(new Supplier<MessageFormatMessage>() {
+            @Override
+            public MessageFormatMessage get() {
+                return new MessageFormatMessage("int foo={0}", 1234567890);
+            }
+        });
+        assertEquals(1, results.size());
+        assertThat("Incorrect Entry", results.get(0), startsWith("ENTRY[ FLOW 
] TRACE entry"));
+        assertThat("Missing entry data", results.get(0), containsString("(int 
foo=1,234,567,890)"));
+        assertThat("Bad toString()", results.get(0), 
not(containsString("MessageFormatMessage")));
+    }
+
+    @Test
+    public void flowTracing_SupplierOfObjectArrayMessage() {
+        logger.traceEntry(new Supplier<ObjectArrayMessage>() {
+            @Override
+            public ObjectArrayMessage get() {
+                return new ObjectArrayMessage(1234567890);
+            }
+        });
+        assertEquals(1, results.size());
+        assertThat("Incorrect Entry", results.get(0), startsWith("ENTRY[ FLOW 
] TRACE entry"));
+        assertThat("Missing entry data", results.get(0), 
containsString("([1234567890])"));
+        assertThat("Bad toString()", results.get(0), 
not(containsString("ObjectArrayMessage")));
+    }
+
+    @Test
+    public void flowTracing_SupplierOfObjectMessage() {
+        logger.traceEntry(new Supplier<ObjectMessage>() {
+            @Override
+            public ObjectMessage get() {
+                return new ObjectMessage(1234567890);
+            }
+        });
+        assertEquals(1, results.size());
+        assertThat("Incorrect Entry", results.get(0), startsWith("ENTRY[ FLOW 
] TRACE entry"));
+        assertThat("Missing entry data", results.get(0), 
containsString("(1234567890)"));
+        assertThat("Bad toString()", results.get(0), 
not(containsString("ObjectMessage")));
+    }
+
+    @Test
+    public void flowTracing_SupplierOfParameterizedMessage() {
+        logger.traceEntry(new Supplier<ParameterizedMessage>() {
+            @Override
+            public ParameterizedMessage get() {
+                return new ParameterizedMessage("int foo={}", 1234567890);
+            }
+        });
+        assertEquals(1, results.size());
+        assertThat("Incorrect Entry", results.get(0), startsWith("ENTRY[ FLOW 
] TRACE entry"));
+        assertThat("Missing entry data", results.get(0), containsString("(int 
foo=1234567890)"));
+        assertThat("Bad toString()", results.get(0), 
not(containsString("ParameterizedMessage")));
+    }
+
+    @Test
+    public void flowTracing_SupplierOfSimpleMessage() {
+        logger.traceEntry(new Supplier<SimpleMessage>() {
+            @Override
+            public SimpleMessage get() {
+                return new SimpleMessage("1234567890");
+            }
+        });
+        assertEquals(1, results.size());
+        assertThat("Incorrect Entry", results.get(0), startsWith("ENTRY[ FLOW 
] TRACE entry"));
+        assertThat("Missing entry data", results.get(0), 
containsString("(1234567890)"));
+        assertThat("Bad toString()", results.get(0), 
not(containsString("SimpleMessage")));
+    }
+
+    @Test
+    public void flowTracing_SupplierOfStringFormattedMessage() {
+        logger.traceEntry(new Supplier<StringFormattedMessage>() {
+            @Override
+            public StringFormattedMessage get() {
+                return new StringFormattedMessage("int foo=%,d", 1234567890);
+            }
+        });
+        assertEquals(1, results.size());
+        assertThat("Incorrect Entry", results.get(0), startsWith("ENTRY[ FLOW 
] TRACE entry"));
+        assertThat("Missing entry data", results.get(0), containsString("(int 
foo=1,234,567,890)"));
+        assertThat("Bad toString()", results.get(0), 
not(containsString("StringFormattedMessage")));
+    }
+
+    @Test
+    public void flowTracing_SupplierOfThreadDumpMessage() {
+        logger.traceEntry(new Supplier<ThreadDumpMessage>() {
+            @Override
+            public ThreadDumpMessage get() {
+                return new ThreadDumpMessage("Title of ...");
+            }
+        });
+        assertEquals(1, results.size());
+        assertThat("Incorrect Entry", results.get(0), startsWith("ENTRY[ FLOW 
] TRACE entry"));
+        assertThat("Missing entry data", results.get(0), 
containsString("RUNNABLE"));
+        assertThat("Missing entry data", results.get(0), containsString("Title 
of ..."));
+        assertThat("Missing entry data", results.get(0), 
containsString(getClass().getName()));
+    }
+
+    @Before
+    public void setup() {
+        results.clear();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b95cc70e/log4j-api/src/test/java/org/apache/logging/log4j/message/JsonMessage.java
----------------------------------------------------------------------
diff --git 
a/log4j-api/src/test/java/org/apache/logging/log4j/message/JsonMessage.java 
b/log4j-api/src/test/java/org/apache/logging/log4j/message/JsonMessage.java
index 1d27365..b0294b6 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/message/JsonMessage.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/message/JsonMessage.java
@@ -24,7 +24,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 /**
  * Converts an Object to a JSON String.
  */
-public class JsonMessage implements Message {
+public class JsonMessage extends AbstractMessage {
 
     private static final long serialVersionUID = 1L;
     private static final ObjectMapper mapper = new ObjectMapper();
@@ -63,9 +63,4 @@ public class JsonMessage implements Message {
     public Throwable getThrowable() {
         return null;
     }
-
-    @Override
-    public String toString() {
-        return getFormattedMessage();
-    }
 }

Reply via email to