You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by vy...@apache.org on 2022/02/22 08:56:41 UTC

[logging-log4j2] 02/02: LOG4J2-3393 Make TextEncoderHelper.encodeText() fallbacks JIT-friendly.

This is an automated email from the ASF dual-hosted git repository.

vy pushed a commit to branch LOG4J2-3393
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit 6d22a0841cc09e769b301bf38e41c5e8d70f3e43
Author: Volkan Yazici <vo...@yazi.ci>
AuthorDate: Tue Feb 22 09:56:20 2022 +0100

    LOG4J2-3393 Make TextEncoderHelper.encodeText() fallbacks JIT-friendly.
---
 .../log4j/core/layout/StringBuilderEncoder.java        |  2 +-
 .../log4j/layout/template/json/JsonTemplateLayout.java | 18 +++++++++++++-----
 2 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/StringBuilderEncoder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/StringBuilderEncoder.java
index d300a74..9af3316 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/StringBuilderEncoder.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/StringBuilderEncoder.java
@@ -89,7 +89,7 @@ public class StringBuilderEncoder implements Encoder<StringBuilder> {
         return threadLocalState;
     }
 
-    private void logEncodeTextException(final Exception ex, final StringBuilder text) {
+    private static void logEncodeTextException(final Exception ex, final StringBuilder text) {
         StatusLogger.getLogger().error("Recovering from StringBuilderEncoder.encode('{}') error: {}", text, ex, ex);
     }
 
diff --git a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayout.java b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayout.java
index 5e36817..4266dfc 100644
--- a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayout.java
+++ b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayout.java
@@ -240,14 +240,22 @@ public class JsonTemplateLayout implements StringLayout {
             try {
                 TextEncoderHelper.encodeText(charsetEncoder, charBuffer, byteBuffer, source, destination);
             } catch (final Exception error) {
-                StatusLogger
-                        .getLogger()
-                        .error("TextEncoderHelper.encodeText() failure", error);
-                final byte[] bytes = source.toString().getBytes(charset);
-                destination.writeBytes(bytes, 0, bytes.length);
+                fallbackEncode(charset, source, destination, error);
             }
         }
 
+        private /* for JIT-ergonomics: */ static void fallbackEncode(
+                final Charset charset,
+                final StringBuilder source,
+                final ByteBufferDestination destination,
+                final Exception error) {
+            StatusLogger
+                    .getLogger()
+                    .error("TextEncoderHelper.encodeText() failure", error);
+            final byte[] bytes = source.toString().getBytes(charset);
+            destination.writeBytes(bytes, 0, bytes.length);
+        }
+
     }
 
     @Override