You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rp...@apache.org on 2016/03/08 06:14:19 UTC

[2/3] logging-log4j2 git commit: LOG4J2-1296 add ReusableObjectMessage, ReusableSimpleMessage

LOG4J2-1296 add ReusableObjectMessage, ReusableSimpleMessage


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

Branch: refs/heads/master
Commit: 64f589a676bea837ea5edd7b9f1f4ffdf8cc6a32
Parents: ac83641
Author: rpopma <rp...@apache.org>
Authored: Tue Mar 8 16:12:17 2016 +1100
Committer: rpopma <rp...@apache.org>
Committed: Tue Mar 8 16:12:17 2016 +1100

----------------------------------------------------------------------
 .../log4j/message/ReusableObjectMessage.java    | 95 ++++++++++++++++++++
 .../ReusableParameterizedMessageFactory.java    | 55 +++++++++++-
 .../log4j/message/ReusableSimpleMessage.java    | 55 ++++++++++++
 3 files changed, 203 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/64f589a6/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableObjectMessage.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableObjectMessage.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableObjectMessage.java
new file mode 100644
index 0000000..468c466
--- /dev/null
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableObjectMessage.java
@@ -0,0 +1,95 @@
+/*
+ * 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 org.apache.logging.log4j.util.StringBuilderFormattable;
+
+/**
+ * Mutable Message wrapper around an Object message.
+ */
+public class ReusableObjectMessage implements ReusableMessage {
+    private static final long serialVersionUID = 6922476812535519960L;
+
+    private transient Object obj;
+    private transient String objectString;
+
+    public void set(Object object) {
+        this.obj = object;
+    }
+
+    /**
+     * Returns the formatted object message.
+     *
+     * @return the formatted object message.
+     */
+    @Override
+    public String getFormattedMessage() {
+        // LOG4J2-763: cache formatted string in case obj changes later
+        if (objectString == null) {
+            objectString = String.valueOf(obj);
+        }
+        return objectString;
+    }
+
+    @Override
+    public void formatTo(final StringBuilder buffer) {
+        if (obj == null || obj instanceof String) {
+            buffer.append((String) obj);
+        } else if (obj instanceof StringBuilder) {
+            buffer.append((StringBuilder) obj);
+        } else if (obj instanceof StringBuilderFormattable) {
+            ((StringBuilderFormattable) obj).formatTo(buffer);
+        } else {
+            buffer.append(obj);
+        }
+    }
+
+    /**
+     * Returns the object formatted using its toString method.
+     *
+     * @return the String representation of the object.
+     */
+    @Override
+    public String getFormat() {
+        return getFormattedMessage();
+    }
+
+    /**
+     * Returns the object as if it were a parameter.
+     *
+     * @return The object.
+     */
+    @Override
+    public Object[] getParameters() {
+        return new Object[] {obj};
+    }
+
+    @Override
+    public String toString() {
+        return getFormattedMessage();
+    }
+
+    /**
+     * Gets the message if it is a throwable.
+     *
+     * @return the message if it is a throwable.
+     */
+    @Override
+    public Throwable getThrowable() {
+        return obj instanceof Throwable ? (Throwable) obj : null;
+    }
+}

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/64f589a6/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableParameterizedMessageFactory.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableParameterizedMessageFactory.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableParameterizedMessageFactory.java
index 0950d5d..bec6e10 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableParameterizedMessageFactory.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableParameterizedMessageFactory.java
@@ -37,6 +37,8 @@ public final class ReusableParameterizedMessageFactory extends AbstractMessageFa
 
     private static final long serialVersionUID = -8970940216592525651L;
     private static ThreadLocal<ReusableParameterizedMessage> threadLocalMessage = new ThreadLocal<>();
+    private static ThreadLocal<ReusableSimpleMessage> threadLocalSimpleMessage = new ThreadLocal<>();
+    private static ThreadLocal<ReusableObjectMessage> threadLocalObjectMessage = new ThreadLocal<>();
 
     /**
      * Constructs a message factory.
@@ -45,7 +47,7 @@ public final class ReusableParameterizedMessageFactory extends AbstractMessageFa
         super();
     }
 
-    private static ReusableParameterizedMessage get() {
+    private static ReusableParameterizedMessage getParameterized() {
         ReusableParameterizedMessage result = threadLocalMessage.get();
         if (result == null) {
             result = new ReusableParameterizedMessage();
@@ -54,6 +56,24 @@ public final class ReusableParameterizedMessageFactory extends AbstractMessageFa
         return result;
     }
 
+    private static ReusableSimpleMessage getSimple() {
+        ReusableSimpleMessage result = threadLocalSimpleMessage.get();
+        if (result == null) {
+            result = new ReusableSimpleMessage();
+            threadLocalSimpleMessage.set(result);
+        }
+        return result;
+    }
+
+    private static ReusableObjectMessage getObject() {
+        ReusableObjectMessage result = threadLocalObjectMessage.get();
+        if (result == null) {
+            result = new ReusableObjectMessage();
+            threadLocalObjectMessage.set(result);
+        }
+        return result;
+    }
+
     /**
      * Creates {@link ReusableParameterizedMessage} instances.
      *
@@ -65,6 +85,37 @@ public final class ReusableParameterizedMessageFactory extends AbstractMessageFa
      */
     @Override
     public Message newMessage(final String message, final Object... params) {
-        return get().set(message, params);
+        return getParameterized().set(message, params);
+    }
+
+    /**
+     * Creates {@link ReusableSimpleMessage} instances.
+     *
+     * @param message The message String.
+     * @return The Message.
+     *
+     * @see MessageFactory#newMessage(String)
+     */
+    @Override
+    public Message newMessage(final String message) {
+        ReusableSimpleMessage result = getSimple();
+        result.set(message);
+        return result;
+    }
+
+
+    /**
+     * Creates {@link ReusableObjectMessage} instances.
+     *
+     * @param message The message Object.
+     * @return The Message.
+     *
+     * @see MessageFactory#newMessage(Object)
+     */
+    @Override
+    public Message newMessage(final Object message) {
+        ReusableObjectMessage result = getObject();
+        result.set(message);
+        return result;
     }
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/64f589a6/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableSimpleMessage.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableSimpleMessage.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableSimpleMessage.java
new file mode 100644
index 0000000..b31e05c
--- /dev/null
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableSimpleMessage.java
@@ -0,0 +1,55 @@
+/*
+ * 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;
+
+/**
+ * Mutable Message wrapper around a String message.
+ */
+public class ReusableSimpleMessage implements ReusableMessage {
+    private static final long serialVersionUID = -9199974506498249809L;
+    private String message;
+
+    public void set(String message) {
+        this.message = message;
+    }
+
+    @Override
+    public String getFormattedMessage() {
+        return message;
+    }
+
+    @Override
+    public String getFormat() {
+        return message;
+    }
+
+    @Override
+    public Object[] getParameters() {
+        return new Object[0];
+    }
+
+    @Override
+    public Throwable getThrowable() {
+        return null;
+    }
+
+    @Override
+    public void formatTo(final StringBuilder buffer) {
+        buffer.append(message);
+    }
+}
+