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/24 17:16:37 UTC
[10/11] logging-log4j2 git commit: LOG4J2-1296 simplify
RingBufferLogEvent: remove inner class StringBuilderWrapperMessage and
implement the Message interface directly
LOG4J2-1296 simplify RingBufferLogEvent: remove inner class StringBuilderWrapperMessage and implement the Message interface directly
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/29a4e87d
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/29a4e87d
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/29a4e87d
Branch: refs/heads/LOG4J2-1278-gc-free-logger
Commit: 29a4e87d1636e1f3473a850f68e005b4dbe44695
Parents: f41322b
Author: rpopma <rp...@apache.org>
Authored: Fri Mar 25 01:15:17 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Fri Mar 25 01:15:17 2016 +0900
----------------------------------------------------------------------
.../log4j/core/async/RingBufferLogEvent.java | 97 +++++++++-----------
1 file changed, 44 insertions(+), 53 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/29a4e87d/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 a241f0a..399c7a5 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
@@ -41,7 +41,7 @@ import com.lmax.disruptor.EventFactory;
* 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 {
+public class RingBufferLogEvent implements LogEvent, ReusableMessage {
/** The {@code EventFactory} for {@code RingBufferLogEvent}s. */
public static final Factory FACTORY = new Factory();
@@ -49,6 +49,8 @@ public class RingBufferLogEvent implements LogEvent {
private static final long serialVersionUID = 8462119088943934758L;
private static final int INITIAL_REUSABLE_MESSAGE_SIZE = size("log4j.initialReusableMsgSize", 128);
private static final int MAX_REUSABLE_MESSAGE_SIZE = size("log4j.maxReusableMsgSize", (128 * 2 + 2) * 2 + 2);
+ private static final Object[] PARAMS = new Object[0];
+ private static final Message EMPTY = new SimpleMessage(Strings.EMPTY);
private static int size(final String property, final int defaultValue) {
return PropertiesUtil.getProperties().getIntegerProperty(property, defaultValue);
@@ -69,53 +71,6 @@ public class RingBufferLogEvent implements LogEvent {
}
}
- private static class StringBuilderWrapperMessage implements ReusableMessage {
- static final StringBuilderWrapperMessage INSTANCE = new StringBuilderWrapperMessage();
- private static final Object[] PARAMS = new Object[0];
- private StringBuilder stringBuilder;
-
- @Override
- public String getFormattedMessage() {
- final String result = stringBuilder.toString();
- trim(stringBuilder, MAX_REUSABLE_MESSAGE_SIZE);
- return result;
- }
-
- @Override
- public String getFormat() {
- return null;
- }
-
- @Override
- public Object[] getParameters() {
- return PARAMS;
- }
-
- @Override
- public Throwable getThrowable() {
- return null;
- }
-
- @Override
- public void formatTo(final StringBuilder buffer) {
- buffer.append(stringBuilder);
- trim(stringBuilder, MAX_REUSABLE_MESSAGE_SIZE);
- }
-
- // ensure that excessively long char[] arrays are not kept in memory forever
- private static void trim(final StringBuilder sb, final int maxReusableMessageSize) {
- if (sb.length() > maxReusableMessageSize) {
- sb.setLength(maxReusableMessageSize);
- sb.trimToSize();
- }
- }
-
- public Message setFormattedMessage(final StringBuilder messageText) {
- this.stringBuilder = messageText;
- return this;
- }
- }
-
private transient AsyncLogger asyncLogger;
private String loggerName;
private Marker marker;
@@ -241,15 +196,51 @@ public class RingBufferLogEvent implements LogEvent {
@Override
public Message getMessage() {
if (message == null) {
- if (messageText == null) {
- message = new SimpleMessage(Strings.EMPTY);
- } else {
- message = StringBuilderWrapperMessage.INSTANCE.setFormattedMessage(messageText);
- }
+ return (messageText == null) ? EMPTY : this;
}
return message;
}
+ /**
+ * @see ReusableMessage#getFormattedMessage()
+ */
+ @Override
+ public String getFormattedMessage() {
+ return messageText.toString();
+ }
+
+ /**
+ * @see ReusableMessage#getFormat()
+ */
+ @Override
+ public String getFormat() {
+ return null;
+ }
+
+ /**
+ * @see ReusableMessage#getParameters()
+ */
+ @Override
+ public Object[] getParameters() {
+ return PARAMS;
+ }
+
+ /**
+ * @see ReusableMessage#getThrowable()
+ */
+ @Override
+ public Throwable getThrowable() {
+ return getThrown();
+ }
+
+ /**
+ * @see ReusableMessage#formatTo(StringBuilder)
+ */
+ @Override
+ public void formatTo(final StringBuilder buffer) {
+ buffer.append(messageText);
+ }
+
private Message getNonNullImmutableMessage() {
return message != null ? message : new SimpleMessage(String.valueOf(messageText));
}