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:18 UTC

[1/3] logging-log4j2 git commit: LOG4J2-1293 ObjectMessage now takes extra effort to avoid creating temporary Strings

Repository: logging-log4j2
Updated Branches:
  refs/heads/master 2be4de9b5 -> 8b99fab7d


LOG4J2-1293 ObjectMessage now takes extra effort  to avoid creating temporary Strings


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

Branch: refs/heads/master
Commit: ac83641b496f52c2b6d5f53644ff3d0bedc975c0
Parents: 963f965
Author: rpopma <rp...@apache.org>
Authored: Tue Mar 8 15:57:48 2016 +1100
Committer: rpopma <rp...@apache.org>
Committed: Tue Mar 8 15:57:48 2016 +1100

----------------------------------------------------------------------
 .../java/org/apache/logging/log4j/message/ObjectMessage.java   | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ac83641b/log4j-api/src/main/java/org/apache/logging/log4j/message/ObjectMessage.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/ObjectMessage.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/ObjectMessage.java
index 6f18463..9fa19f4 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/message/ObjectMessage.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/ObjectMessage.java
@@ -58,7 +58,11 @@ public class ObjectMessage implements Message, StringBuilderFormattable {
 
     @Override
     public void formatTo(final StringBuilder buffer) {
-        if (obj instanceof StringBuilderFormattable) {
+        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);


[3/3] logging-log4j2 git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/logging-log4j2

Posted by rp...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/logging-log4j2


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

Branch: refs/heads/master
Commit: 8b99fab7def047ef59c19e09ee990690c3c13efa
Parents: 64f589a 2be4de9
Author: rpopma <rp...@apache.org>
Authored: Tue Mar 8 16:12:42 2016 +1100
Committer: rpopma <rp...@apache.org>
Committed: Tue Mar 8 16:12:42 2016 +1100

----------------------------------------------------------------------
 .../logging/log4j/util/PropertiesUtil.java      |  22 +
 .../logging/log4j/util/PropertiesUtilTest.java  |  65 +++
 .../resources/PropertiesUtilTest.properties     |  29 +
 .../org/apache/logging/log4j/core/Appender.java |   8 +
 .../org/apache/logging/log4j/core/Layout.java   |   3 +-
 .../log4j/core/appender/mom/JmsAppender.java    |  10 +-
 .../log4j/core/appender/mom/JmsManager.java     |   2 +-
 .../appender/mom/jeromq/JeroMqAppender.java     | 229 +-------
 .../core/appender/mom/jeromq/JeroMqManager.java | 220 ++++++++
 .../core/appender/mom/kafka/KafkaAppender.java  |  12 +-
 .../core/appender/mom/kafka/KafkaManager.java   |   4 +
 .../rolling/RollingRandomAccessFileManager.java |   2 +-
 .../core/config/AbstractConfiguration.java      |   1 +
 .../log4j/core/config/ConfigurationAware.java   |  33 ++
 .../log4j/core/config/CronScheduledFuture.java  |  12 +-
 .../logging/log4j/core/config/LoggerConfig.java |  51 +-
 .../builder/api/AppenderComponentBuilder.java   |   9 +-
 .../api/AppenderRefComponentBuilder.java        |   9 +-
 .../api/CompositeFilterComponentBuilder.java    |  14 +-
 .../builder/api/FilterableComponentBuilder.java |  34 ++
 .../builder/api/LoggableComponentBuilder.java   |  33 ++
 .../builder/api/LoggerComponentBuilder.java     |  16 +-
 .../builder/api/RootLoggerComponentBuilder.java |  16 +-
 .../core/config/builder/api/package-info.java   |   2 +
 .../config/builder/impl/BuiltConfiguration.java |  17 +-
 .../impl/DefaultAppenderComponentBuilder.java   |   2 +
 .../DefaultAppenderRefComponentBuilder.java     |   2 +
 ...DefaultComponentAndConfigurationBuilder.java |   2 +
 .../builder/impl/DefaultComponentBuilder.java   |  22 +-
 .../DefaultCompositeFilterComponentBuilder.java |   2 +-
 .../impl/DefaultConfigurationBuilder.java       |  16 +-
 .../DefaultCustomLevelComponentBuilder.java     |   2 +-
 .../impl/DefaultFilterComponentBuilder.java     |   2 +-
 .../impl/DefaultLayoutComponentBuilder.java     |   2 +-
 .../impl/DefaultLoggerComponentBuilder.java     |   4 +-
 .../impl/DefaultRootLoggerComponentBuilder.java |   4 +-
 .../impl/DefaultScriptComponentBuilder.java     |   2 +-
 .../impl/DefaultScriptFileComponentBuilder.java |   2 +
 .../core/config/builder/impl/package-info.java  |   2 +
 .../core/config/json/JsonConfiguration.java     | 550 +++++++++----------
 .../PropertiesConfigurationBuilder.java         | 298 ++++++++++
 .../PropertiesConfigurationFactory.java         | 378 +------------
 .../core/config/status/StatusConfiguration.java |   4 +-
 .../log4j/core/config/xml/XmlConfiguration.java |  14 +-
 .../AbstractConfigurationAwareLookup.java       |  35 ++
 .../logging/log4j/core/lookup/Interpolator.java |   6 +-
 .../logging/log4j/core/lookup/Log4jLookup.java  |  60 +-
 .../log4j/core/lookup/StrSubstitutor.java       |  19 +-
 .../logging/log4j/core/net/SmtpManager.java     |   8 +-
 .../log4j/core/net/SslSocketManager.java        |   2 +-
 .../logging/log4j/core/util/KeyValuePair.java   |   3 -
 .../logging/log4j/core/util/StringEncoder.java  |   2 +-
 .../appender/mom/jeromq/JeroMqAppenderTest.java |  12 +-
 .../log4j/core/config/ConfigurationTest.java    |   3 +-
 .../core/config/CustomConfigurationTest.java    |   2 +-
 .../log4j/core/lookup/Log4jLookupTest.java      |  32 +-
 .../core/lookup/Log4jLookupWithSpacesTest.java  |  16 +-
 .../log4j/core/util/PropertiesUtilTest.java     |  42 --
 .../src/test/resources/log4j-routing.properties |   9 -
 .../log4j-scriptFile-filters.properties         |   8 -
 .../src/test/resources/log4j-test1.properties   |  58 ++
 .../log4j2-properties-root-only.properties      |   6 -
 .../test/resources/log4j2-properties.properties |   9 -
 src/changes/changes.xml                         |   9 +
 src/site/xdoc/manual/configuration.xml.vm       |  20 +-
 65 files changed, 1387 insertions(+), 1137 deletions(-)
----------------------------------------------------------------------



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

Posted by rp...@apache.org.
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);
+    }
+}
+