This is an automated email from the ASF dual-hosted git repository. vy pushed a commit to branch recycler-api-3.x in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 7299ef4ca6b61c0ad80664a45a6440b4192c8794 Author: Volkan Yazıcı <[email protected]> AuthorDate: Sat Mar 25 13:29:30 2023 +0100 More changes --- .../core/impl/ReusableLogEventFactoryTest.java | 8 +-- .../core/layout/AbstractStringLayoutTest.java | 60 +++++++++++++--------- .../logging/log4j/core/layout/GelfLayout.java | 53 +++++-------------- .../logging/log4j/core/layout/PatternLayout.java | 42 ++++++++++++--- .../logging/log4j/core/layout/Rfc5424Layout.java | 36 ++++++------- .../apache/logging/log4j/core/util/Constants.java | 2 +- .../layout/template/json/JsonTemplateLayout.java | 55 ++++++-------------- .../template/json/JsonTemplateLayoutDefaults.java | 14 ++--- .../template/json/resolver/CounterResolver.java | 1 + .../json/resolver/EventResolverContext.java | 26 ++-------- .../json/resolver/MessageParameterResolver.java | 1 + .../json/resolver/ReadOnlyStringMapResolver.java | 2 +- .../json/resolver/StackTraceStringResolver.java | 2 +- 13 files changed, 135 insertions(+), 167 deletions(-) diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/impl/ReusableLogEventFactoryTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/impl/ReusableLogEventFactoryTest.java index 4769cf652a..f0d8c346bc 100644 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/impl/ReusableLogEventFactoryTest.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/impl/ReusableLogEventFactoryTest.java @@ -42,7 +42,7 @@ public class ReusableLogEventFactoryTest { } @Test - public void testCreateEventReturnsDifferentInstanceIfNotReleased() throws Exception { + public void testCreateEventReturnsDifferentInstanceIfNotReleased() { final LogEvent event1 = callCreateEvent("a", Level.DEBUG, new SimpleMessage("abc"), null); final LogEvent event2 = callCreateEvent("b", Level.INFO, new SimpleMessage("xyz"), null); assertNotSame(event1, event2); @@ -51,7 +51,7 @@ public class ReusableLogEventFactoryTest { } @Test - public void testCreateEventReturnsSameInstance() throws Exception { + public void testCreateEventReturnsSameInstance() { final LogEvent event1 = callCreateEvent("a", Level.DEBUG, new SimpleMessage("abc"), null); factory.recycle(event1); final LogEvent event2 = callCreateEvent("b", Level.INFO, new SimpleMessage("xyz"), null); @@ -64,7 +64,7 @@ public class ReusableLogEventFactoryTest { } @Test - public void testCreateEventOverwritesFields() throws Exception { + public void testCreateEventOverwritesFields() { final LogEvent event1 = callCreateEvent("a", Level.DEBUG, new SimpleMessage("abc"), null); assertEquals("a", event1.getLoggerName(), "logger"); assertEquals(Level.DEBUG, event1.getLevel(), "level"); @@ -125,7 +125,7 @@ public class ReusableLogEventFactoryTest { } @Test - public void testCreateEventInitFieldsProperly() throws Exception { + public void testCreateEventInitFieldsProperly() { final LogEvent event = callCreateEvent("logger", Level.INFO, new SimpleMessage("xyz"), null); try { assertNotNull(event.getContextData()); diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/layout/AbstractStringLayoutTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/layout/AbstractStringLayoutTest.java index 257a291b16..175bacc9ae 100644 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/layout/AbstractStringLayoutTest.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/layout/AbstractStringLayoutTest.java @@ -43,39 +43,51 @@ public class AbstractStringLayoutTest { } @Test - public void testGetStringBuilderCapacityRestrictedToMax() throws Exception { + public void testGetStringBuilderCapacityRestrictedToMax() { + final ConcreteStringLayout layout = new ConcreteStringLayout(); final StringBuilder sb = layout.acquireStringBuilder(); final int initialCapacity = sb.capacity(); - assertEquals(ConcreteStringLayout.DEFAULT_STRING_BUILDER_SIZE, sb.capacity(), "initial capacity"); + try { + assertEquals(ConcreteStringLayout.DEFAULT_STRING_BUILDER_SIZE, sb.capacity(), "initial capacity"); - final int SMALL = 100; - final String smallMessage = new String(new char[SMALL]); - sb.append(smallMessage); - assertEquals(initialCapacity, sb.capacity(), "capacity not grown"); - assertEquals(SMALL, sb.length(), "length=msg length"); - layout.releaseStringBuilder(sb); + final int SMALL = 100; + final String smallMessage = new String(new char[SMALL]); + sb.append(smallMessage); + assertEquals(initialCapacity, sb.capacity(), "capacity not grown"); + assertEquals(SMALL, sb.length(), "length=msg length"); + } finally { + layout.releaseStringBuilder(sb); + } final StringBuilder sb2 = layout.acquireStringBuilder(); - assertEquals(sb2.capacity(), initialCapacity, "capacity unchanged"); - assertEquals(0, sb2.length(), "empty, ready for use"); + try { + assertEquals(sb2.capacity(), initialCapacity, "capacity unchanged"); + assertEquals(0, sb2.length(), "empty, ready for use"); - final int LARGE = ConcreteStringLayout.MAX_STRING_BUILDER_SIZE * 2; - final String largeMessage = new String(new char[LARGE]); - sb2.append(largeMessage); - assertTrue(sb2.capacity() >= LARGE, "capacity grown to fit msg length"); - assertTrue(sb2.capacity() >= ConcreteStringLayout.MAX_STRING_BUILDER_SIZE, - "capacity is now greater than max length"); - assertEquals(LARGE, sb2.length(), "length=msg length"); - sb2.setLength(0); // set 0 before next getStringBuilder() call - assertEquals(0, sb2.length(), "empty, cleared"); - assertTrue(sb2.capacity() >= ConcreteStringLayout.MAX_STRING_BUILDER_SIZE, "capacity remains very large"); - layout.releaseStringBuilder(sb2); + final int LARGE = ConcreteStringLayout.MAX_STRING_BUILDER_SIZE * 2; + final String largeMessage = new String(new char[LARGE]); + sb2.append(largeMessage); + assertTrue(sb2.capacity() >= LARGE, "capacity grown to fit msg length"); + assertTrue(sb2.capacity() >= ConcreteStringLayout.MAX_STRING_BUILDER_SIZE, + "capacity is now greater than max length"); + assertEquals(LARGE, sb2.length(), "length=msg length"); + sb2.setLength(0); // set 0 before next getStringBuilder() call + assertEquals(0, sb2.length(), "empty, cleared"); + assertTrue(sb2.capacity() >= ConcreteStringLayout.MAX_STRING_BUILDER_SIZE, "capacity remains very large"); + } finally { + layout.releaseStringBuilder(sb2); + } final StringBuilder sb3 = layout.acquireStringBuilder(); - assertEquals(ConcreteStringLayout.MAX_STRING_BUILDER_SIZE, sb3.capacity(), - "capacity, trimmed to MAX_STRING_BUILDER_SIZE"); - assertEquals(0, sb3.length(), "empty, ready for use"); + try { + assertEquals(ConcreteStringLayout.MAX_STRING_BUILDER_SIZE, sb3.capacity(), + "capacity, trimmed to MAX_STRING_BUILDER_SIZE"); + assertEquals(0, sb3.length(), "empty, ready for use"); + } finally { + layout.releaseStringBuilder(sb3); + } + } } 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 69baf2f181..bd911e8e8b 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,19 +16,6 @@ */ 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.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Objects; -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; @@ -38,28 +25,26 @@ import org.apache.logging.log4j.core.layout.internal.IncludeChecker; import org.apache.logging.log4j.core.layout.internal.ListChecker; import org.apache.logging.log4j.core.lookup.StrSubstitutor; import org.apache.logging.log4j.core.net.Severity; -import org.apache.logging.log4j.core.util.JsonUtils; -import org.apache.logging.log4j.core.util.KeyValuePair; -import org.apache.logging.log4j.core.util.NetUtils; -import org.apache.logging.log4j.core.util.Patterns; -import org.apache.logging.log4j.core.util.StringBuilderWriter; +import org.apache.logging.log4j.core.util.*; import org.apache.logging.log4j.message.MapMessage; import org.apache.logging.log4j.message.Message; -import org.apache.logging.log4j.plugins.Configurable; -import org.apache.logging.log4j.plugins.Inject; -import org.apache.logging.log4j.plugins.Plugin; -import org.apache.logging.log4j.plugins.PluginBuilderAttribute; -import org.apache.logging.log4j.plugins.PluginElement; -import org.apache.logging.log4j.plugins.PluginFactory; -import org.apache.logging.log4j.spi.LoggingSystem; +import org.apache.logging.log4j.plugins.*; import org.apache.logging.log4j.spi.Recycler; -import org.apache.logging.log4j.spi.RecyclerFactory; import org.apache.logging.log4j.status.StatusLogger; import org.apache.logging.log4j.util.StringBuilderFormattable; import org.apache.logging.log4j.util.StringBuilders; import org.apache.logging.log4j.util.Strings; import org.apache.logging.log4j.util.TriConsumer; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.nio.charset.StandardCharsets; +import java.util.*; +import java.util.zip.DeflaterOutputStream; +import java.util.zip.GZIPOutputStream; + /** * Lays out events in the Graylog Extended Log Format (GELF) 1.1. * <p> @@ -176,8 +161,6 @@ public final class GelfLayout extends AbstractStringLayout { @PluginElement("PatternSelector") private PatternSelector patternSelector = null; - private RecyclerFactory recyclerFactory; - public Builder() { super(); setCharset(StandardCharsets.UTF_8); @@ -206,13 +189,10 @@ public final class GelfLayout extends AbstractStringLayout { .setConfiguration(config) .build(); } - if (recyclerFactory == null) { - recyclerFactory = config != null ? config.getRecyclerFactory() : LoggingSystem.getRecyclerFactory(); - } return new GelfLayout(config, host, additionalFields, compressionType, compressionThreshold, includeStacktrace, includeThreadContext, includeMapMessage, includeNullDelimiter, includeNewLineDelimiter, omitEmptyFields, mdcChecker, mapChecker, patternLayout, - threadContextPrefix, mapPrefix, recyclerFactory); + threadContextPrefix, mapPrefix); } private ListChecker createChecker(final String excludes, final String includes) { @@ -449,11 +429,6 @@ public final class GelfLayout extends AbstractStringLayout { return asBuilder(); } - @Inject - public B setRecyclerFactory(final RecyclerFactory recyclerFactory) { - this.recyclerFactory = recyclerFactory; - return asBuilder(); - } } private GelfLayout(final Configuration config, final String host, final KeyValuePair[] additionalFields, @@ -461,7 +436,7 @@ public final class GelfLayout extends AbstractStringLayout { final boolean includeThreadContext, final boolean includeMapMessage, final boolean includeNullDelimiter, final boolean includeNewLineDelimiter, final boolean omitEmptyFields, final ListChecker mdcChecker, final ListChecker mapChecker, final PatternLayout patternLayout, final String mdcPrefix, - final String mapPrefix, final RecyclerFactory recyclerFactory) { + final String mapPrefix) { super(config, StandardCharsets.UTF_8, null, null); this.host = host != null ? host : NetUtils.getLocalHostname(); this.additionalFields = additionalFields != null ? additionalFields : new KeyValuePair[0]; @@ -486,7 +461,7 @@ public final class GelfLayout extends AbstractStringLayout { this.mdcWriter = new FieldWriter(mdcChecker, mdcPrefix); this.mapWriter = new FieldWriter(mapChecker, mapPrefix); this.layout = patternLayout; - stacktraceRecycler = recyclerFactory.create( + stacktraceRecycler = config.getRecyclerFactory().create( () -> new StringBuilderWriter(MAX_STRING_BUILDER_SIZE), writer -> { final StringBuilder stringBuilder = writer.getBuilder(); diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java index 2f365b47a4..b34f25c249 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java @@ -106,9 +106,17 @@ public final class PatternLayout extends AbstractStringLayout { * @param headerPattern header conversion pattern. * @param footerPattern footer conversion pattern. */ - private PatternLayout(final Configuration config, final RegexReplacement replace, final String eventPattern, - final PatternSelector patternSelector, final Charset charset, final boolean alwaysWriteExceptions, - final boolean disableAnsi, final boolean noConsoleNoAnsi, final String headerPattern, + private PatternLayout( + final Configuration config, + final RecyclerFactory recyclerFactory, + final RegexReplacement replace, + final String eventPattern, + final PatternSelector patternSelector, + final Charset charset, + final boolean alwaysWriteExceptions, + final boolean disableAnsi, + final boolean noConsoleNoAnsi, + final String headerPattern, final String footerPattern) { super(config, charset, newSerializerBuilder() @@ -371,6 +379,7 @@ public final class PatternLayout extends AbstractStringLayout { public static class SerializerBuilder implements org.apache.logging.log4j.plugins.util.Builder<Serializer> { private Configuration configuration; + private RecyclerFactory recyclerFactory; private RegexReplacement replace; private String pattern; private String defaultPattern; @@ -384,9 +393,11 @@ public final class PatternLayout extends AbstractStringLayout { if (Strings.isEmpty(pattern) && Strings.isEmpty(defaultPattern)) { return null; } - final RecyclerFactory recyclerFactory = configuration != null - ? configuration.getRecyclerFactory() - : LoggingSystem.getRecyclerFactory(); + if (recyclerFactory == null) { + recyclerFactory = configuration != null + ? configuration.getRecyclerFactory() + : LoggingSystem.getRecyclerFactory(); + } final Recycler<StringBuilder> recycler = createRecycler(recyclerFactory); if (patternSelector == null) { try { @@ -420,6 +431,11 @@ public final class PatternLayout extends AbstractStringLayout { return this; } + public SerializerBuilder setRecyclerFactory(final RecyclerFactory recyclerFactory) { + this.recyclerFactory = recyclerFactory; + return this; + } + public SerializerBuilder setReplace(final RegexReplacement replace) { this.replace = replace; return this; @@ -561,6 +577,9 @@ public final class PatternLayout extends AbstractStringLayout { @PluginConfiguration private Configuration configuration; + @PluginBuilderAttribute + private RecyclerFactory recyclerFactory; + @PluginElement("Replace") private RegexReplacement regexReplacement; @@ -620,6 +639,14 @@ public final class PatternLayout extends AbstractStringLayout { return this; } + /** + * @param recyclerFactory a recycler factory + */ + public Builder setRecyclerFactory(final RecyclerFactory recyclerFactory) { + this.recyclerFactory = recyclerFactory; + return this; + } + /** * @param regexReplacement * A Regex replacement @@ -693,7 +720,8 @@ public final class PatternLayout extends AbstractStringLayout { if (configuration == null) { configuration = new DefaultConfiguration(); } - return new PatternLayout(configuration, regexReplacement, pattern, patternSelector, charset, + return new PatternLayout( + configuration, recyclerFactory, regexReplacement, pattern, patternSelector, charset, alwaysWriteExceptions, disableAnsi, noConsoleNoAnsi, header, footer); } } diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/Rfc5424Layout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/Rfc5424Layout.java index 23bfacf544..71f8497f65 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/Rfc5424Layout.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/Rfc5424Layout.java @@ -594,25 +594,25 @@ public final class Rfc5424Layout extends AbstractStringLayout { /** * Create the RFC 5424 Layout. * - * @param facility The Facility is used to try to classify the message. - * @param id The default structured data id to use when formatting according to RFC 5424. - * @param enterpriseNumber The IANA enterprise number. - * @param includeMDC Indicates whether data from the ThreadContextMap will be included in the RFC 5424 Syslog - * record. Defaults to "true:. - * @param mdcId The id to use for the MDC Structured Data Element. - * @param mdcPrefix The prefix to add to MDC key names. - * @param eventPrefix The prefix to add to event key names. - * @param newLine If true, a newline will be appended to the end of the syslog record. The default is false. - * @param escapeNL String that should be used to replace newlines within the message text. - * @param appName The value to use as the APP-NAME in the RFC 5424 syslog record. - * @param msgId The default value to be used in the MSGID field of RFC 5424 syslog records. - * @param excludes A comma separated list of MDC keys that should be excluded from the LogEvent. - * @param includes A comma separated list of MDC keys that should be included in the FlumeEvent. - * @param required A comma separated list of MDC keys that must be present in the MDC. - * @param exceptionPattern The pattern for formatting exceptions. + * @param facility The Facility is used to try to classify the message. + * @param id The default structured data id to use when formatting according to RFC 5424. + * @param enterpriseNumber The IANA enterprise number. + * @param includeMDC Indicates whether data from the ThreadContextMap will be included in the RFC 5424 Syslog + * record. Defaults to "true:. + * @param mdcId The id to use for the MDC Structured Data Element. + * @param mdcPrefix The prefix to add to MDC key names. + * @param eventPrefix The prefix to add to event key names. + * @param newLine If true, a newline will be appended to the end of the syslog record. The default is false. + * @param escapeNL String that should be used to replace newlines within the message text. + * @param appName The value to use as the APP-NAME in the RFC 5424 syslog record. + * @param msgId The default value to be used in the MSGID field of RFC 5424 syslog records. + * @param excludes A comma separated list of MDC keys that should be excluded from the LogEvent. + * @param includes A comma separated list of MDC keys that should be included in the FlumeEvent. + * @param required A comma separated list of MDC keys that must be present in the MDC. + * @param exceptionPattern The pattern for formatting exceptions. * @param useTlsMessageFormat If true the message will be formatted according to RFC 5425. - * @param loggerFields Container for the KeyValuePairs containing the patterns - * @param config The Configuration. Some Converters require access to the Interpolator. + * @param loggerFields Container for the KeyValuePairs containing the patterns + * @param config The Configuration. Some Converters require access to the Interpolator. * @return An Rfc5424Layout. * @deprecated Use {@link Rfc5424LayoutBuilder instead} */ diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Constants.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Constants.java index 578da7717d..62fc657e36 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Constants.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Constants.java @@ -112,7 +112,7 @@ public final class Constants { * Maximum size of the StringBuilders used in RingBuffer LogEvents to store the contents of reusable Messages. * After a large message has been delivered to the appenders, the StringBuilder is trimmed to this size. * <p> - * The default value is 518, which allows the StringBuilder to resize three times from its initial size. + * The default value is {@value}, which allows the StringBuilder to resize three times from its initial size. * Users can override with system property "log4j.maxReusableMsgSize". * </p> * @since 2.6 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 1bd4895de1..a9edfb8b76 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 @@ -16,16 +16,6 @@ */ package org.apache.logging.log4j.layout.template.json; -import java.nio.ByteBuffer; -import java.nio.CharBuffer; -import java.nio.charset.Charset; -import java.nio.charset.CharsetEncoder; -import java.nio.charset.CodingErrorAction; -import java.util.*; -import java.util.function.Function; -import java.util.function.Supplier; -import java.util.stream.Collectors; - import org.apache.logging.log4j.core.Layout; import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.StringLayout; @@ -42,10 +32,19 @@ import org.apache.logging.log4j.layout.template.json.util.Uris; import org.apache.logging.log4j.plugins.*; import org.apache.logging.log4j.plugins.di.Key; import org.apache.logging.log4j.spi.Recycler; -import org.apache.logging.log4j.spi.RecyclerFactory; import org.apache.logging.log4j.status.StatusLogger; import org.apache.logging.log4j.util.Strings; +import java.nio.ByteBuffer; +import java.nio.CharBuffer; +import java.nio.charset.Charset; +import java.nio.charset.CharsetEncoder; +import java.nio.charset.CodingErrorAction; +import java.util.*; +import java.util.function.Function; +import java.util.function.Supplier; +import java.util.stream.Collectors; + @Configurable(elementType = Layout.ELEMENT_TYPE) @Plugin public class JsonTemplateLayout implements StringLayout { @@ -94,11 +93,7 @@ public class JsonTemplateLayout implements StringLayout { .setMaxStringLength(builder.maxStringLength) .setTruncatedStringSuffix(builder.truncatedStringSuffix) .build(); - this.eventResolver = createEventResolver( - builder, - configuration, - charset, - jsonWriter); + this.eventResolver = createEventResolver(builder, configuration, charset, jsonWriter); this.contextRecycler = createContextRecycler(builder, jsonWriter); } @@ -149,7 +144,6 @@ public class JsonTemplateLayout implements StringLayout { .setSubstitutor(substitutor) .setCharset(charset) .setJsonWriter(jsonWriter) - .setRecyclerFactory(builder.recyclerFactory) .setMaxStringByteCount(maxStringByteCount) .setTruncatedStringSuffix(builder.truncatedStringSuffix) .setLocationInfoEnabled(builder.locationInfoEnabled) @@ -187,14 +181,9 @@ public class JsonTemplateLayout implements StringLayout { : template; } - private static Recycler<Context> createContextRecycler( - final Builder builder, - final JsonWriter jsonWriter) { - final Supplier<Context> supplier = - createContextSupplier(builder.charset, jsonWriter); - return builder - .recyclerFactory - .create(supplier, Context::close); + private static Recycler<Context> createContextRecycler(final Builder builder, final JsonWriter jsonWriter) { + final Supplier<Context> supplier = createContextSupplier(builder.charset, jsonWriter); + return builder.configuration.getRecyclerFactory().create(supplier, Context::close); } private static Supplier<Context> createContextSupplier( @@ -393,10 +382,6 @@ public class JsonTemplateLayout implements StringLayout { private String truncatedStringSuffix = JsonTemplateLayoutDefaults.getTruncatedStringSuffix(); - @PluginBuilderAttribute - private RecyclerFactory recyclerFactory = - JsonTemplateLayoutDefaults.getRecyclerFactory(); - private Builder() { // Do nothing. } @@ -531,15 +516,6 @@ public class JsonTemplateLayout implements StringLayout { return this; } - public RecyclerFactory getRecyclerFactory() { - return recyclerFactory; - } - - public Builder setRecyclerFactory(final RecyclerFactory recyclerFactory) { - this.recyclerFactory = recyclerFactory; - return this; - } - @Override public JsonTemplateLayout build() { validate(); @@ -547,7 +523,7 @@ public class JsonTemplateLayout implements StringLayout { } private void validate() { - Objects.requireNonNull(configuration, "config"); + Objects.requireNonNull(configuration, "configuration"); if (Strings.isBlank(eventTemplate) && Strings.isBlank(eventTemplateUri)) { throw new IllegalArgumentException( "both eventTemplate and eventTemplateUri are blank"); @@ -564,7 +540,6 @@ public class JsonTemplateLayout implements StringLayout { maxStringLength); } Objects.requireNonNull(truncatedStringSuffix, "truncatedStringSuffix"); - Objects.requireNonNull(recyclerFactory, "recyclerFactory"); } } diff --git a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutDefaults.java b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutDefaults.java index db77071681..962853fa81 100644 --- a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutDefaults.java +++ b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutDefaults.java @@ -16,16 +16,14 @@ */ package org.apache.logging.log4j.layout.template.json; +import org.apache.logging.log4j.util.PropertiesUtil; +import org.apache.logging.log4j.util.PropertyEnvironment; + import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.Locale; import java.util.TimeZone; -import org.apache.logging.log4j.spi.RecyclerFactories; -import org.apache.logging.log4j.spi.RecyclerFactory; -import org.apache.logging.log4j.util.PropertiesUtil; -import org.apache.logging.log4j.util.PropertyEnvironment; - public final class JsonTemplateLayoutDefaults { private JsonTemplateLayoutDefaults() {} @@ -138,10 +136,4 @@ public final class JsonTemplateLayoutDefaults { "…"); } - public static RecyclerFactory getRecyclerFactory() { - final String recyclerFactorySpec = PROPERTIES.getStringProperty( - "log4j.layout.jsonTemplate.recyclerFactory"); - return RecyclerFactories.ofSpec(recyclerFactorySpec); - } - } diff --git a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/CounterResolver.java b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/CounterResolver.java index 139a699f19..39892ee880 100644 --- a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/CounterResolver.java +++ b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/CounterResolver.java @@ -145,6 +145,7 @@ public class CounterResolver implements EventResolver { private static Recycler<StringBuilder> createStringBuilderRecycler( final EventResolverContext context) { return context + .getConfiguration() .getRecyclerFactory() .create( StringBuilder::new, diff --git a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/EventResolverContext.java b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/EventResolverContext.java index 28038ae81f..aa5cf04261 100644 --- a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/EventResolverContext.java +++ b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/EventResolverContext.java @@ -16,18 +16,17 @@ */ package org.apache.logging.log4j.layout.template.json.resolver; -import java.nio.charset.Charset; -import java.util.List; -import java.util.Map; -import java.util.Objects; - import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.config.Configuration; import org.apache.logging.log4j.layout.template.json.JsonTemplateLayout.EventTemplateAdditionalField; import org.apache.logging.log4j.layout.template.json.util.JsonWriter; -import org.apache.logging.log4j.spi.RecyclerFactory; import org.apache.logging.log4j.util.Strings; +import java.nio.charset.Charset; +import java.util.List; +import java.util.Map; +import java.util.Objects; + /** * {@link TemplateResolverContext} specialized for {@link LogEvent}s. * @@ -48,8 +47,6 @@ public final class EventResolverContext implements TemplateResolverContext<LogEv private final JsonWriter jsonWriter; - private final RecyclerFactory recyclerFactory; - private final int maxStringByteCount; private final String truncatedStringSuffix; @@ -71,7 +68,6 @@ public final class EventResolverContext implements TemplateResolverContext<LogEv this.substitutor = builder.substitutor; this.charset = builder.charset; this.jsonWriter = builder.jsonWriter; - this.recyclerFactory = builder.recyclerFactory; this.maxStringByteCount = builder.maxStringByteCount; this.truncatedStringSuffix = builder.truncatedStringSuffix; this.locationInfoEnabled = builder.locationInfoEnabled; @@ -114,10 +110,6 @@ public final class EventResolverContext implements TemplateResolverContext<LogEv return jsonWriter; } - public RecyclerFactory getRecyclerFactory() { - return recyclerFactory; - } - public int getMaxStringByteCount() { return maxStringByteCount; } @@ -164,8 +156,6 @@ public final class EventResolverContext implements TemplateResolverContext<LogEv private JsonWriter jsonWriter; - private RecyclerFactory recyclerFactory; - private int maxStringByteCount; private String truncatedStringSuffix; @@ -216,11 +206,6 @@ public final class EventResolverContext implements TemplateResolverContext<LogEv return this; } - public Builder setRecyclerFactory(final RecyclerFactory recyclerFactory) { - this.recyclerFactory = recyclerFactory; - return this; - } - public Builder setMaxStringByteCount(final int maxStringByteCount) { this.maxStringByteCount = maxStringByteCount; return this; @@ -272,7 +257,6 @@ public final class EventResolverContext implements TemplateResolverContext<LogEv Objects.requireNonNull(substitutor, "substitutor"); Objects.requireNonNull(charset, "charset"); Objects.requireNonNull(jsonWriter, "jsonWriter"); - Objects.requireNonNull(recyclerFactory, "recyclerFactory"); if (maxStringByteCount <= 0) { throw new IllegalArgumentException( "was expecting maxStringByteCount > 0: " + diff --git a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/MessageParameterResolver.java b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/MessageParameterResolver.java index 3dc80ad16a..da935e0419 100644 --- a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/MessageParameterResolver.java +++ b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/MessageParameterResolver.java @@ -83,6 +83,7 @@ public final class MessageParameterResolver implements EventResolver { final EventResolverContext context, final TemplateResolverConfig config) { this.parameterConsumerStateRecycler = context + .getConfiguration() .getRecyclerFactory() .create(ParameterConsumerState::new); this.stringified = config.getBoolean("stringified", false); diff --git a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/ReadOnlyStringMapResolver.java b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/ReadOnlyStringMapResolver.java index 7ea4730186..b5065d46f2 100644 --- a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/ReadOnlyStringMapResolver.java +++ b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/ReadOnlyStringMapResolver.java @@ -212,7 +212,7 @@ class ReadOnlyStringMapResolver implements EventResolver { if (key != null) { return createKeyResolver(key, stringified, mapAccessor); } else { - final RecyclerFactory recyclerFactory = context.getRecyclerFactory(); + final RecyclerFactory recyclerFactory = context.getConfiguration().getRecyclerFactory(); return createResolver( recyclerFactory, flatten, diff --git a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/StackTraceStringResolver.java b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/StackTraceStringResolver.java index c02f8f11b4..0b1a890d49 100644 --- a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/StackTraceStringResolver.java +++ b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/StackTraceStringResolver.java @@ -56,7 +56,7 @@ final class StackTraceStringResolver implements StackTraceResolver { final Supplier<TruncatingBufferedPrintWriter> writerSupplier = () -> TruncatingBufferedPrintWriter.ofCapacity( context.getMaxStringByteCount()); - final RecyclerFactory recyclerFactory = context.getRecyclerFactory(); + final RecyclerFactory recyclerFactory = context.getConfiguration().getRecyclerFactory(); this.srcWriterRecycler = recyclerFactory.create( writerSupplier, TruncatingBufferedPrintWriter::close);
