From 21a0b5b709aa04e52896d8b910a75521bb19ba03 Mon Sep 17 00:00:00 2001 From: Tobias Stadler Date: Sun, 26 Jul 2020 10:20:28 +0200 Subject: [PATCH] Use a thread local StringBuilder to avoid creating garbage --- .../logging/jboss/logmanager/EcsFormatter.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/jboss-logmanager-ecs-formatter/src/main/java/co/elastic/logging/jboss/logmanager/EcsFormatter.java b/jboss-logmanager-ecs-formatter/src/main/java/co/elastic/logging/jboss/logmanager/EcsFormatter.java index 6164d69e..6d55cf86 100644 --- a/jboss-logmanager-ecs-formatter/src/main/java/co/elastic/logging/jboss/logmanager/EcsFormatter.java +++ b/jboss-logmanager-ecs-formatter/src/main/java/co/elastic/logging/jboss/logmanager/EcsFormatter.java @@ -31,6 +31,8 @@ public class EcsFormatter extends ExtFormatter { + private static final ThreadLocal STRING_BUILDER = new ThreadLocal(); + private String serviceName; private String eventDataset; private boolean includeOrigin; @@ -44,9 +46,21 @@ public EcsFormatter() { stackTraceAsArray = Boolean.getBoolean(getProperty("co.elastic.logging.jboss.logmanager.EcsFormatter.stackTraceAsArray", "false")); } + private static StringBuilder getStringBuilder() { + StringBuilder result = STRING_BUILDER.get(); + if (result == null) { + result = new StringBuilder(1024); + STRING_BUILDER.set(result); + } + + result.setLength(0); + + return result; + } + @Override public String format(ExtLogRecord record) { - StringBuilder builder = new StringBuilder(); + StringBuilder builder = getStringBuilder(); EcsJsonSerializer.serializeObjectStart(builder, record.getMillis()); EcsJsonSerializer.serializeLogLevel(builder, record.getLevel().getName()); EcsJsonSerializer.serializeFormattedMessage(builder, record.getFormattedMessage());