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/06/19 09:09:02 UTC
logging-log4j2 git commit: LOG4J2-1434 Ensure that the thread-local
StringBuilder in GelfLayout will not retain excessive memory after a large
message was logged.
Repository: logging-log4j2
Updated Branches:
refs/heads/master 13b453ce5 -> aed2298e3
LOG4J2-1434 Ensure that the thread-local StringBuilder in GelfLayout will not retain excessive memory after a large message was logged.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/aed2298e
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/aed2298e
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/aed2298e
Branch: refs/heads/master
Commit: aed2298e3272164804266a7ed7a47b8b6dc3ee00
Parents: 13b453c
Author: Mikael St�ldal <mi...@magine.com>
Authored: Sun Jun 19 11:08:06 2016 +0200
Committer: Mikael St�ldal <mi...@magine.com>
Committed: Sun Jun 19 11:08:06 2016 +0200
----------------------------------------------------------------------
.../logging/log4j/core/layout/GelfLayout.java | 37 +++++++++++++-------
1 file changed, 24 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/aed2298e/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 13a14f9..098d18c 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
@@ -16,6 +16,17 @@
*/
package org.apache.logging.log4j.core.layout;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.nio.charset.StandardCharsets;
+import java.util.Collections;
+import java.util.Map;
+import java.util.zip.DeflaterOutputStream;
+import java.util.zip.GZIPOutputStream;
+
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.core.Layout;
import org.apache.logging.log4j.core.LogEvent;
@@ -32,17 +43,6 @@ import org.apache.logging.log4j.status.StatusLogger;
import org.apache.logging.log4j.util.StringBuilderFormattable;
import org.apache.logging.log4j.util.Strings;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.nio.charset.StandardCharsets;
-import java.util.Collections;
-import java.util.Map;
-import java.util.zip.DeflaterOutputStream;
-import java.util.zip.GZIPOutputStream;
-
/**
* Lays out events in the Graylog Extended Log Format (GELF) 1.1.
* <p>
@@ -231,8 +231,12 @@ public final class GelfLayout extends AbstractStringLayout {
JsonUtils.quoteAsString(((CharSequence)message), builder);
} else if (gcFree && message instanceof StringBuilderFormattable) {
final StringBuilder messageBuffer = getMessageStringBuilder();
- ((StringBuilderFormattable)message).formatTo(messageBuffer);
- JsonUtils.quoteAsString(messageBuffer, builder);
+ try {
+ ((StringBuilderFormattable) message).formatTo(messageBuffer);
+ JsonUtils.quoteAsString(messageBuffer, builder);
+ } finally {
+ returnMessageStringBuilder(messageBuffer);
+ }
} else {
JsonUtils.quoteAsString(toNullSafeString(message.getFormattedMessage()), builder);
}
@@ -253,6 +257,13 @@ public final class GelfLayout extends AbstractStringLayout {
return result;
}
+ private void returnMessageStringBuilder(StringBuilder stringBuilder) {
+ if (stringBuilder.length() > MAX_STRING_BUILDER_SIZE) {
+ stringBuilder.setLength(MAX_STRING_BUILDER_SIZE);
+ stringBuilder.trimToSize();
+ }
+ }
+
private CharSequence toNullSafeString(final CharSequence s) {
return s == null ? Strings.EMPTY : s;
}