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);
+ }
+}
+