You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by mi...@apache.org on 2016/04/18 13:44:24 UTC
[09/12] logging-log4j2 git commit: Use CharSequence instead of
CharSequenceFormattable
Use CharSequence instead of CharSequenceFormattable
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/85a46bbe
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/85a46bbe
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/85a46bbe
Branch: refs/heads/master
Commit: 85a46bbe78b749ea14dd2a70cc809932271f5dea
Parents: 299f488
Author: Mikael Ståldal <mi...@magine.com>
Authored: Fri Apr 15 16:23:11 2016 +0200
Committer: Mikael Ståldal <mi...@magine.com>
Committed: Fri Apr 15 16:23:11 2016 +0200
----------------------------------------------------------------------
.../log4j/message/ReusableSimpleMessage.java | 20 +++++++++---
.../logging/log4j/message/SimpleMessage.java | 27 +++++++++++-----
.../log4j/util/CharSequenceFormattable.java | 33 --------------------
.../log4j/core/async/RingBufferLogEvent.java | 21 ++++++++++---
.../logging/log4j/core/layout/GelfLayout.java | 5 ++-
5 files changed, 55 insertions(+), 51 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/85a46bbe/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
index 2dd46d2..ed6e39e 100644
--- 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
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.message;
-import org.apache.logging.log4j.util.CharSequenceFormattable;
import org.apache.logging.log4j.util.PerformanceSensitive;
/**
@@ -24,7 +23,7 @@ import org.apache.logging.log4j.util.PerformanceSensitive;
* @since 2.6
*/
@PerformanceSensitive("allocation")
-public class ReusableSimpleMessage implements ReusableMessage, CharSequenceFormattable {
+public class ReusableSimpleMessage implements ReusableMessage, CharSequence {
private static final long serialVersionUID = -9199974506498249809L;
private static Object[] EMPTY_PARAMS = new Object[0];
private CharSequence charSequence;
@@ -62,9 +61,22 @@ public class ReusableSimpleMessage implements ReusableMessage, CharSequenceForma
buffer.append(charSequence);
}
+
+ // CharSequence impl
+
+ @Override
+ public int length() {
+ return charSequence == null ? 0 : charSequence.length();
+ }
+
+ @Override
+ public char charAt(int index) {
+ return charSequence.charAt(index);
+ }
+
@Override
- public CharSequence getFormattedCharSequence() {
- return charSequence;
+ public CharSequence subSequence(int start, int end) {
+ return charSequence.subSequence(start, end);
}
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/85a46bbe/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 44dc15e..e26c506 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
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.message;
-import org.apache.logging.log4j.util.CharSequenceFormattable;
import org.apache.logging.log4j.util.StringBuilderFormattable;
import java.io.IOException;
@@ -26,7 +25,7 @@ import java.io.ObjectOutputStream;
/**
* The simplest possible implementation of Message. It just returns the String given as the constructor argument.
*/
-public class SimpleMessage implements Message, StringBuilderFormattable, CharSequenceFormattable {
+public class SimpleMessage implements Message, StringBuilderFormattable, CharSequence {
private static final long serialVersionUID = -8398002534962715992L;
private String message;
@@ -74,11 +73,6 @@ public class SimpleMessage implements Message, StringBuilderFormattable, CharSeq
buffer.append(charSequence);
}
- @Override
- public CharSequence getFormattedCharSequence() {
- return charSequence;
- }
-
/**
* Returns the message.
* @return the message.
@@ -131,6 +125,25 @@ public class SimpleMessage implements Message, StringBuilderFormattable, CharSeq
return null;
}
+
+ // CharSequence impl
+
+ @Override
+ public int length() {
+ return charSequence == null ? 0 : charSequence.length();
+ }
+
+ @Override
+ public char charAt(int index) {
+ return charSequence.charAt(index);
+ }
+
+ @Override
+ public CharSequence subSequence(int start, int end) {
+ return charSequence.subSequence(start, end);
+ }
+
+
private void writeObject(final ObjectOutputStream out) throws IOException {
getFormattedMessage(); // initialize the message:String field
out.defaultWriteObject();
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/85a46bbe/log4j-api/src/main/java/org/apache/logging/log4j/util/CharSequenceFormattable.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/CharSequenceFormattable.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/CharSequenceFormattable.java
deleted file mode 100644
index b14289d..0000000
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/CharSequenceFormattable.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.util;
-
-/**
- * Objects that implement this interface can be converted to text, ideally without allocating temporary objects.
- *
- * @since 2.6
- */
-public interface CharSequenceFormattable {
-
- /**
- * Return a text representation of this object, ideally without allocating temporary objects or copying strings.
- *
- * This may return a shared buffer (such as a {@link StringBuilder}). The caller should quickly consume
- * the data and not keep any reference to the returned {@link CharSequence}.
- */
- CharSequence getFormattedCharSequence();
-}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/85a46bbe/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java
index 873efc6..9504e8a 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java
@@ -30,7 +30,6 @@ import org.apache.logging.log4j.message.Message;
import org.apache.logging.log4j.message.ReusableMessage;
import org.apache.logging.log4j.message.SimpleMessage;
import org.apache.logging.log4j.message.TimestampMessage;
-import org.apache.logging.log4j.util.CharSequenceFormattable;
import org.apache.logging.log4j.util.PropertiesUtil;
import org.apache.logging.log4j.util.Strings;
@@ -42,7 +41,7 @@ import java.util.Map;
* When the Disruptor is started, the RingBuffer is populated with event objects. These objects are then re-used during
* the life of the RingBuffer.
*/
-public class RingBufferLogEvent implements LogEvent, ReusableMessage, CharSequenceFormattable {
+public class RingBufferLogEvent implements LogEvent, ReusableMessage, CharSequence {
/** The {@code EventFactory} for {@code RingBufferLogEvent}s. */
public static final Factory FACTORY = new Factory();
@@ -242,11 +241,25 @@ public class RingBufferLogEvent implements LogEvent, ReusableMessage, CharSequen
buffer.append(messageText);
}
+
+ // CharSequence impl
+
@Override
- public CharSequence getFormattedCharSequence() {
- return messageText;
+ public int length() {
+ return messageText.length();
+ }
+
+ @Override
+ public char charAt(int index) {
+ return messageText.charAt(index);
}
+ @Override
+ public CharSequence subSequence(int start, int end) {
+ return messageText.subSequence(start, end);
+ }
+
+
private Message getNonNullImmutableMessage() {
return message != null ? message : new SimpleMessage(String.valueOf(messageText));
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/85a46bbe/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java
index 1854004..24ab6c4 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java
@@ -29,7 +29,6 @@ import org.apache.logging.log4j.core.util.JsonUtils;
import org.apache.logging.log4j.core.util.KeyValuePair;
import org.apache.logging.log4j.message.Message;
import org.apache.logging.log4j.status.StatusLogger;
-import org.apache.logging.log4j.util.CharSequenceFormattable;
import org.apache.logging.log4j.util.StringBuilderFormattable;
import org.apache.logging.log4j.util.Strings;
@@ -221,8 +220,8 @@ public final class GelfLayout extends AbstractStringLayout {
builder.append("\"short_message\":\"");
Message message = event.getMessage();
- if (message instanceof CharSequenceFormattable) {
- JsonUtils.quoteAsString(toNullSafeString(((CharSequenceFormattable)message).getFormattedCharSequence()), builder);
+ if (message instanceof CharSequence) {
+ JsonUtils.quoteAsString(((CharSequence)message), builder);
} else if (gcFree && message instanceof StringBuilderFormattable) {
StringBuilder messageBuffer = getMessageStringBuilder();
((StringBuilderFormattable)message).formatTo(messageBuffer);