This is an automated email from the ASF dual-hosted git repository. vy pushed a commit to branch scheduled-for-deletion/gelf-layout-efficiency in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 482abdd62ab2dbddbedface4d027a8f110a803d8 Author: Mikael Ståldal <[email protected]> AuthorDate: Tue Mar 22 14:33:45 2016 +0100 WIP --- .../logging/log4j/core/layout/AbstractStringLayout.java | 16 ++++++++++++++++ .../org/apache/logging/log4j/core/layout/GelfLayout.java | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java index 84dbd690fa..4ff489e674 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java @@ -24,6 +24,8 @@ import org.apache.logging.log4j.core.util.StringEncoder; import org.apache.logging.log4j.util.Strings; import java.io.UnsupportedEncodingException; +import java.nio.ByteBuffer; +import java.nio.CharBuffer; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; @@ -164,6 +166,20 @@ public abstract class AbstractStringLayout extends AbstractLayout<String> implem } } + protected byte[] getBytes(final CharSequence cseq) { + if (useCustomEncoding) { // rely on branch prediction to eliminate this check if false + return StringEncoder.encodeSingleByteChars(cseq); + } + ByteBuffer byteBuffer = charset.encode(CharBuffer.wrap(cseq)); + if (byteBuffer.hasArray()) { + return byteBuffer.array(); + } else { + byte[] bytes = new byte[byteBuffer.remaining()]; + byteBuffer.get(bytes); + return bytes; + } + } + @Override public Charset getCharset() { return charset; 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 7942ebb351..de484310f3 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 @@ -144,7 +144,7 @@ public final class GelfLayout extends AbstractStringLayout { @Override public byte[] toByteArray(final LogEvent event) { StringBuilder text = toText(event, getStringBuilder()); - final byte[] bytes = getBytes(text.toString()); + final byte[] bytes = getBytes(text); return compressionType != CompressionType.OFF && bytes.length > compressionThreshold ? compress(bytes) : bytes; }
