You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by gg...@apache.org on 2021/07/28 15:05:28 UTC
[logging-log4j2] branch release-2.x updated: Add and resuse
constants to avoid creating empty arrays over and over.
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch release-2.x
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
The following commit(s) were added to refs/heads/release-2.x by this push:
new 97ec707 Add and resuse constants to avoid creating empty arrays over and over.
97ec707 is described below
commit 97ec707d69280ef57aed8fd5831dc4f3a75f7715
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Wed Jul 28 11:05:20 2021 -0400
Add and resuse constants to avoid creating empty arrays over and over.
Also, the NoGcLayout was still allocating empty byte arrays for headers
and footers.
Full local build OK.
---
.../org/apache/log4j/bridge/AppenderAdapter.java | 2 +-
.../org/apache/log4j/bridge/LogEventAdapter.java | 3 ++-
.../builders/appender/AsyncAppenderBuilder.java | 3 ++-
.../builders/appender/RewriteAppenderBuilder.java | 3 ++-
.../org/apache/log4j/config/PropertySetter.java | 3 ++-
.../org/apache/log4j/spi/ThrowableInformation.java | 4 +++-
.../org/apache/log4j/xml/Log4jEntityResolver.java | 9 ++++----
.../test/java/org/apache/log4j/CategoryTest.java | 25 +++++++++++-----------
.../logging/log4j/message/ObjectArrayMessage.java | 6 +++---
.../log4j/message/ReusableSimpleMessage.java | 4 ++--
.../log4j/spi/DefaultThreadContextStack.java | 2 +-
.../org/apache/logging/log4j/util/Constants.java | 10 +++++++++
.../org/apache/logging/log4j/util/Strings.java | 5 +++++
.../apache/logging/log4j/AbstractLoggerTest.java | 21 +++++++++++-------
.../log4j/message/ReusableSimpleMessageTest.java | 13 ++++++-----
.../logging/log4j/simple/SimpleLoggerTest.java | 5 +++--
.../java/org/apache/logging/log4j/core/Filter.java | 5 +++++
.../core/appender/HttpURLConnectionManager.java | 2 +-
.../core/appender/MemoryMappedFileManager.java | 3 ++-
.../log4j/core/appender/db/ColumnMapping.java | 5 +++++
.../core/appender/db/jdbc/JdbcDatabaseManager.java | 8 +++----
.../appender/rolling/action/PathCondition.java | 4 ++--
.../logging/log4j/core/config/AppenderControl.java | 5 +++++
.../log4j/core/config/AppenderControlArraySet.java | 4 ++--
.../log4j/core/config/ConfigurationFactory.java | 2 +-
.../log4j/core/config/ConfigurationSource.java | 11 +++++-----
.../log4j/core/config/CustomLevelConfig.java | 5 +++++
.../logging/log4j/core/config/CustomLevels.java | 2 +-
.../apache/logging/log4j/core/config/Property.java | 2 +-
.../config/plugins/convert/Base64Converter.java | 3 ++-
.../config/plugins/convert/TypeConverters.java | 3 ++-
.../logging/log4j/core/filter/CompositeFilter.java | 5 ++---
.../log4j/core/layout/AbstractJacksonLayout.java | 7 +++++-
.../logging/log4j/core/layout/GelfLayout.java | 2 +-
.../log4j/core/layout/LevelPatternSelector.java | 4 ++--
.../log4j/core/layout/MarkerPatternSelector.java | 4 ++--
.../logging/log4j/core/layout/PatternLayout.java | 2 +-
.../log4j/core/layout/ScriptPatternSelector.java | 4 ++--
.../logging/log4j/core/pattern/AnsiEscape.java | 3 ++-
.../log4j/core/pattern/PatternFormatter.java | 6 ++++++
.../logging/log4j/core/util/KeyValuePair.java | 5 +++++
.../apache/logging/log4j/core/util/UuidUtil.java | 5 ++++-
.../apache/logging/dumbster/smtp/SmtpMessage.java | 4 +++-
.../core/appender/mom/jeromq/JeroMqTestClient.java | 3 ++-
.../async/AsyncLoggerTestArgumentFreedOnError.java | 14 ++++++------
.../core/async/QueueFullAsyncLoggerTest3.java | 12 +++++------
.../log4j/core/impl/ThrowableProxyTest.java | 16 ++++++++++----
.../core/pattern/DatePatternConverterTest.java | 2 +-
.../apache/logging/log4j/core/util/AssertTest.java | 6 +++---
.../core/util/datetime/FixedDateFormatTest.java | 3 ++-
.../logging/log4j/flume/appender/FlumeEvent.java | 3 ++-
.../layout/template/json/JsonTemplateLayout.java | 4 +++-
.../log4j/perf/jmh/GelfLayoutBenchmark.java | 2 +-
.../apache/logging/log4j/perf/nogc/NoGcLayout.java | 7 ++++--
.../boot/Log4j2CloudConfigLoggingSystem.java | 5 +++--
src/changes/changes.xml | 3 +++
56 files changed, 204 insertions(+), 109 deletions(-)
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/bridge/AppenderAdapter.java b/log4j-1.2-api/src/main/java/org/apache/log4j/bridge/AppenderAdapter.java
index 1ae0369..b2163c6 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/bridge/AppenderAdapter.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/bridge/AppenderAdapter.java
@@ -51,7 +51,7 @@ public class AppenderAdapter {
filters.add(new FilterAdapter(filter));
filter = filter.getNext();
}
- appenderFilter = CompositeFilter.createFilters(filters.toArray(new Filter[0]));
+ appenderFilter = CompositeFilter.createFilters(filters.toArray(Filter.EMPTY_ARRAY));
} else {
appenderFilter = new FilterAdapter(appender.getFilter());
}
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/bridge/LogEventAdapter.java b/log4j-1.2-api/src/main/java/org/apache/log4j/bridge/LogEventAdapter.java
index a91fd98..56f8e7e 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/bridge/LogEventAdapter.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/bridge/LogEventAdapter.java
@@ -26,6 +26,7 @@ import org.apache.logging.log4j.core.util.Loader;
import org.apache.logging.log4j.core.util.Throwables;
import org.apache.logging.log4j.spi.StandardLevel;
import org.apache.logging.log4j.status.StatusLogger;
+import org.apache.logging.log4j.util.Strings;
import java.lang.reflect.Method;
import java.util.Map;
@@ -204,7 +205,7 @@ public class LogEventAdapter extends LoggingEvent {
@Override
public String[] getThrowableStrRep() {
if (event.getThrown() != null) {
- return Throwables.toStringList(event.getThrown()).toArray(new String[0]);
+ return Throwables.toStringList(event.getThrown()).toArray(Strings.EMPTY_ARRAY);
}
return null;
}
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/AsyncAppenderBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/AsyncAppenderBuilder.java
index 46a0b0c..940678c 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/AsyncAppenderBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/AsyncAppenderBuilder.java
@@ -30,6 +30,7 @@ import org.apache.logging.log4j.core.appender.AsyncAppender;
import org.apache.logging.log4j.core.config.AppenderRef;
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.status.StatusLogger;
+import org.apache.logging.log4j.util.Strings;
import org.w3c.dom.Element;
import java.util.ArrayList;
@@ -121,7 +122,7 @@ public class AsyncAppenderBuilder extends AbstractBuilder implements AppenderBui
}
}
});
- return createAppender(name, level.get(), appenderRefs.get().toArray(new String[0]), blocking.get(),
+ return createAppender(name, level.get(), appenderRefs.get().toArray(Strings.EMPTY_ARRAY), blocking.get(),
bufferSize.get(), includeLocation.get(), config);
}
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RewriteAppenderBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RewriteAppenderBuilder.java
index b06973c..3c6e642 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RewriteAppenderBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RewriteAppenderBuilder.java
@@ -33,6 +33,7 @@ import org.apache.logging.log4j.core.appender.rewrite.RewriteAppender;
import org.apache.logging.log4j.core.config.AppenderRef;
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.status.StatusLogger;
+import org.apache.logging.log4j.util.Strings;
import org.w3c.dom.Element;
import java.util.ArrayList;
@@ -104,7 +105,7 @@ public class RewriteAppenderBuilder extends AbstractBuilder implements AppenderB
}
}
});
- return createAppender(name, level.get(), appenderRefs.get().toArray(new String[0]), rewritePolicyHolder.get(),
+ return createAppender(name, level.get(), appenderRefs.get().toArray(Strings.EMPTY_ARRAY), rewritePolicyHolder.get(),
filter.get(), config);
}
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/config/PropertySetter.java b/log4j-1.2-api/src/main/java/org/apache/log4j/config/PropertySetter.java
index e865da6..5325761 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/config/PropertySetter.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/config/PropertySetter.java
@@ -56,6 +56,7 @@ import java.util.Properties;
* Otherwise an {@link IntrospectionException} are thrown.
*/
public class PropertySetter {
+ private static final PropertyDescriptor[] EMPTY_PROPERTY_DESCRIPTOR_ARRAY = {};
private static Logger LOGGER = StatusLogger.getLogger();
protected Object obj;
protected PropertyDescriptor[] props;
@@ -93,7 +94,7 @@ public class PropertySetter {
props = bi.getPropertyDescriptors();
} catch (IntrospectionException ex) {
LOGGER.error("Failed to introspect {}: {}", obj, ex.getMessage());
- props = new PropertyDescriptor[0];
+ props = EMPTY_PROPERTY_DESCRIPTOR_ARRAY;
}
}
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/spi/ThrowableInformation.java b/log4j-1.2-api/src/main/java/org/apache/log4j/spi/ThrowableInformation.java
index 0e82a1c..898eb9c 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/spi/ThrowableInformation.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/spi/ThrowableInformation.java
@@ -20,6 +20,8 @@ import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
+import org.apache.logging.log4j.util.Strings;
+
/**
* Class Description goes here.
*/
@@ -52,7 +54,7 @@ public class ThrowableInformation implements java.io.Serializable {
@SuppressWarnings("unchecked")
List<String> elements = (List<String>) toStringList.invoke(null, throwable);
if (elements != null) {
- return elements.toArray(new String[0]);
+ return elements.toArray(Strings.EMPTY_ARRAY);
}
} catch (IllegalAccessException | InvocationTargetException ex) {
// Ignore the exception.
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/xml/Log4jEntityResolver.java b/log4j-1.2-api/src/main/java/org/apache/log4j/xml/Log4jEntityResolver.java
index 8bd0ff3..9c9226b 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/xml/Log4jEntityResolver.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/xml/Log4jEntityResolver.java
@@ -17,14 +17,15 @@
package org.apache.log4j.xml;
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.status.StatusLogger;
+import org.apache.logging.log4j.util.Constants;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-
/**
* An {@link EntityResolver} specifically designed to return
* <code>log4j.dtd</code> which is embedded within the log4j jar
@@ -42,7 +43,7 @@ public class Log4jEntityResolver implements EntityResolver {
if (in == null) {
LOGGER.warn("Could not find [log4j.dtd] using [{}] class loader, parsed without DTD.",
clazz.getClassLoader());
- in = new ByteArrayInputStream(new byte[0]);
+ in = new ByteArrayInputStream(Constants.EMPTY_BYTE_ARRAY);
}
return new InputSource(in);
}
diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/CategoryTest.java b/log4j-1.2-api/src/test/java/org/apache/log4j/CategoryTest.java
index f73c22b..7140b5b 100644
--- a/log4j-1.2-api/src/test/java/org/apache/log4j/CategoryTest.java
+++ b/log4j-1.2-api/src/test/java/org/apache/log4j/CategoryTest.java
@@ -17,6 +17,16 @@
package org.apache.log4j;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.lang.reflect.Method;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Consumer;
+
import org.apache.logging.log4j.core.Layout;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.LoggerContext;
@@ -27,22 +37,13 @@ import org.apache.logging.log4j.message.Message;
import org.apache.logging.log4j.message.ObjectMessage;
import org.apache.logging.log4j.message.SimpleMessage;
import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.util.Constants;
import org.apache.logging.log4j.util.Strings;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
-import java.lang.reflect.Method;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.function.Consumer;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
/**
* Tests of Category.
*/
@@ -133,7 +134,7 @@ public class CategoryTest {
final Logger logger = Logger.getLogger("org.example.foo");
logger.setLevel(Level.ERROR);
final Priority debug = Level.DEBUG;
- logger.l7dlog(debug, "Hello, World", new Object[0], null);
+ logger.l7dlog(debug, "Hello, World", Constants.EMPTY_OBJECT_ARRAY, null);
assertTrue(appender.getEvents().isEmpty());
}
@@ -152,7 +153,7 @@ public class CategoryTest {
final Priority debug = Level.DEBUG;
// the next line will throw an exception if the LogManager loggers
// aren't supported by 1.2 Logger/Category
- logger.l7dlog(debug, "Hello, World", new Object[0], null);
+ logger.l7dlog(debug, "Hello, World", Constants.EMPTY_OBJECT_ARRAY, null);
assertTrue(appender.getEvents().isEmpty());
}
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/ObjectArrayMessage.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/ObjectArrayMessage.java
index dc11a56..1cf139e 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/message/ObjectArrayMessage.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/ObjectArrayMessage.java
@@ -21,6 +21,8 @@ import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Arrays;
+import org.apache.logging.log4j.util.Constants;
+
/**
* Handles messages that contain an Object[].
* <p>
@@ -34,8 +36,6 @@ import java.util.Arrays;
*/
public final class ObjectArrayMessage implements Message {
- private static final Object[] EMPTY_OBJECT_ARRAY = new Object[0];
-
private static final long serialVersionUID = -5903272448334166185L;
private transient Object[] array;
@@ -48,7 +48,7 @@ public final class ObjectArrayMessage implements Message {
* The Object to format.
*/
public ObjectArrayMessage(final Object... obj) {
- this.array = obj == null ? EMPTY_OBJECT_ARRAY : obj;
+ this.array = obj == null ? Constants.EMPTY_OBJECT_ARRAY : obj;
}
private boolean equalObjectsOrStrings(final Object[] left, final Object[] right) {
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableSimpleMessage.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableSimpleMessage.java
index de0b975..258c9a4 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableSimpleMessage.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableSimpleMessage.java
@@ -16,6 +16,7 @@
*/
package org.apache.logging.log4j.message;
+import org.apache.logging.log4j.util.Constants;
import org.apache.logging.log4j.util.PerformanceSensitive;
/**
@@ -25,7 +26,6 @@ import org.apache.logging.log4j.util.PerformanceSensitive;
@PerformanceSensitive("allocation")
public class ReusableSimpleMessage implements ReusableMessage, CharSequence, ParameterVisitable, Clearable {
private static final long serialVersionUID = -9199974506498249809L;
- private static Object[] EMPTY_PARAMS = new Object[0];
private CharSequence charSequence;
public void set(final String message) {
@@ -48,7 +48,7 @@ public class ReusableSimpleMessage implements ReusableMessage, CharSequence, Par
@Override
public Object[] getParameters() {
- return EMPTY_PARAMS;
+ return Constants.EMPTY_OBJECT_ARRAY;
}
@Override
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/spi/DefaultThreadContextStack.java b/log4j-api/src/main/java/org/apache/logging/log4j/spi/DefaultThreadContextStack.java
index e7a0f87..da6a5e1 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/spi/DefaultThreadContextStack.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/spi/DefaultThreadContextStack.java
@@ -259,7 +259,7 @@ public class DefaultThreadContextStack implements ThreadContextStack, StringBuil
public Object[] toArray() {
final MutableThreadContextStack result = STACK.get();
if (result == null) {
- return new String[0];
+ return Strings.EMPTY_ARRAY;
}
return result.toArray(new Object[result.size()]);
}
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/Constants.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/Constants.java
index 13f20a8..2af1a17 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/Constants.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/Constants.java
@@ -83,6 +83,16 @@ public final class Constants {
}
/**
+ * The empty array.
+ */
+ public static final Object[] EMPTY_OBJECT_ARRAY = {};
+
+ /**
+ * The empty array.
+ */
+ public static final byte[] EMPTY_BYTE_ARRAY = {};
+
+ /**
* Prevent class instantiation.
*/
private Constants() {
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/Strings.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/Strings.java
index 0686558..143a841 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/Strings.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/Strings.java
@@ -35,6 +35,11 @@ public final class Strings {
public static final String EMPTY = "";
/**
+ * The empty array.
+ */
+ public static final String[] EMPTY_ARRAY = {};
+
+ /**
* OS-dependent line separator, defaults to {@code "\n"} if the system property {@code ""line.separator"} cannot be
* read.
*/
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/AbstractLoggerTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/AbstractLoggerTest.java
index 02df0ed..9c51190 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/AbstractLoggerTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/AbstractLoggerTest.java
@@ -16,6 +16,16 @@
*/
package org.apache.logging.log4j;
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
+
+import java.util.List;
+
import org.apache.logging.log4j.junit.StatusLoggerLevel;
import org.apache.logging.log4j.message.Message;
import org.apache.logging.log4j.message.ObjectMessage;
@@ -26,17 +36,12 @@ import org.apache.logging.log4j.spi.AbstractLogger;
import org.apache.logging.log4j.spi.MessageFactory2Adapter;
import org.apache.logging.log4j.status.StatusData;
import org.apache.logging.log4j.status.StatusLogger;
+import org.apache.logging.log4j.util.Constants;
import org.apache.logging.log4j.util.MessageSupplier;
import org.apache.logging.log4j.util.Supplier;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.parallel.ResourceLock;
-import java.util.List;
-
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.*;
-
@StatusLoggerLevel("WARN")
@ResourceLock("log4j2.MarkerManager")
public class AbstractLoggerTest {
@@ -935,7 +940,7 @@ public class AbstractLoggerTest {
@Override
public Object[] getParameters() {
- return new Object[0];
+ return Constants.EMPTY_OBJECT_ARRAY;
}
@Override
@@ -1293,7 +1298,7 @@ public class AbstractLoggerTest {
@Override
public Object[] getParameters() {
- return new Object[0];
+ return Constants.EMPTY_OBJECT_ARRAY;
}
@Override
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/message/ReusableSimpleMessageTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/message/ReusableSimpleMessageTest.java
index 622f355..a53b951 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/message/ReusableSimpleMessageTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/message/ReusableSimpleMessageTest.java
@@ -16,9 +16,12 @@
*/
package org.apache.logging.log4j.message;
-import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.junit.jupiter.api.Assertions.*;
+import org.apache.logging.log4j.util.Constants;
+import org.junit.jupiter.api.Test;
/**
* Tests ReusableSimpleMessage.
@@ -66,16 +69,16 @@ public class ReusableSimpleMessageTest {
@Test
public void testGetParameters_InitiallyReturnsEmptyArray() throws Exception {
- assertArrayEquals(new Object[0], new ReusableSimpleMessage().getParameters());
+ assertArrayEquals(Constants.EMPTY_OBJECT_ARRAY, new ReusableSimpleMessage().getParameters());
}
@Test
public void testGetParameters_ReturnsEmptyArrayAfterMessageSet() throws Exception {
final ReusableSimpleMessage msg = new ReusableSimpleMessage();
msg.set("abc");
- assertArrayEquals(new Object[0], msg.getParameters());
+ assertArrayEquals(Constants.EMPTY_OBJECT_ARRAY, msg.getParameters());
msg.set("def");
- assertArrayEquals(new Object[0], msg.getParameters());
+ assertArrayEquals(Constants.EMPTY_OBJECT_ARRAY, msg.getParameters());
}
@Test
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/simple/SimpleLoggerTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/simple/SimpleLoggerTest.java
index 9cd4043..63388f3 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/simple/SimpleLoggerTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/simple/SimpleLoggerTest.java
@@ -19,6 +19,7 @@ package org.apache.logging.log4j.simple;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.junit.LoggerContextFactoryExtension;
+import org.apache.logging.log4j.util.Constants;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
@@ -46,7 +47,7 @@ public class SimpleLoggerTest {
@Test
public void testEmptyObjectArray() {
- logger.error(new Object[0]);
+ logger.error(Constants.EMPTY_OBJECT_ARRAY);
}
/**
@@ -54,7 +55,7 @@ public class SimpleLoggerTest {
*/
@Test
public void testMessageWithEmptyObjectArray() {
- logger.error("Logging with an empty Object[] {} {}", new Object[0]);
+ logger.error("Logging with an empty Object[] {} {}", Constants.EMPTY_BYTE_ARRAY);
}
/**
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter.java
index 0286498..054d67b 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter.java
@@ -33,6 +33,11 @@ import org.apache.logging.log4j.util.EnglishEnums;
public interface Filter extends LifeCycle {
/**
+ * The empty array.
+ */
+ Filter[] EMPTY_ARRAY = {};
+
+ /**
* Main {@linkplain org.apache.logging.log4j.core.config.plugins.Plugin#elementType() plugin element type} for
* Filter plugins.
*
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/HttpURLConnectionManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/HttpURLConnectionManager.java
index 90c8550..55ccfdc 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/HttpURLConnectionManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/HttpURLConnectionManager.java
@@ -65,7 +65,7 @@ public class HttpURLConnectionManager extends HttpManager {
this.method = Objects.requireNonNull(method, "method");
this.connectTimeoutMillis = connectTimeoutMillis;
this.readTimeoutMillis = readTimeoutMillis;
- this.headers = headers != null ? headers : new Property[0];
+ this.headers = headers != null ? headers : Property.EMPTY_ARRAY;
this.sslConfiguration = sslConfiguration;
if (this.sslConfiguration != null && !isHttps) {
throw new ConfigurationException("SSL configuration can only be specified with URL scheme https");
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManager.java
index d8d9ced..26c3edd 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManager.java
@@ -37,6 +37,7 @@ import org.apache.logging.log4j.core.Layout;
import org.apache.logging.log4j.core.util.Closer;
import org.apache.logging.log4j.core.util.FileUtils;
import org.apache.logging.log4j.core.util.NullOutputStream;
+import org.apache.logging.log4j.util.Constants;
//Lines too long...
//CHECKSTYLE:OFF
@@ -76,7 +77,7 @@ public class MemoryMappedFileManager extends OutputStreamManager {
protected MemoryMappedFileManager(final RandomAccessFile file, final String fileName, final OutputStream os,
final boolean immediateFlush, final long position, final int regionLength, final String advertiseURI,
final Layout<? extends Serializable> layout, final boolean writeHeader) throws IOException {
- super(os, fileName, layout, writeHeader, ByteBuffer.wrap(new byte[0]));
+ super(os, fileName, layout, writeHeader, ByteBuffer.wrap(Constants.EMPTY_BYTE_ARRAY));
this.immediateFlush = immediateFlush;
this.randomAccessFile = Objects.requireNonNull(file, "RandomAccessFile");
this.regionLength = regionLength;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/ColumnMapping.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/ColumnMapping.java
index 1219060..a011879 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/ColumnMapping.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/ColumnMapping.java
@@ -44,6 +44,11 @@ import org.apache.logging.log4j.util.ReadOnlyStringMap;
public class ColumnMapping {
/**
+ * The empty array.
+ */
+ public static final ColumnMapping[] EMPTY_ARRAY = {};
+
+ /**
* Builder for {@link ColumnMapping}.
*/
public static class Builder implements org.apache.logging.log4j.core.util.Builder<ColumnMapping> {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
index 5a6db17..1314765 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
@@ -389,11 +389,11 @@ public final class JdbcDatabaseManager extends AbstractDatabaseManager {
*/
@Deprecated
public static JdbcDatabaseManager getJDBCDatabaseManager(final String name, final int bufferSize,
- final ConnectionSource connectionSource, final String tableName, final ColumnConfig[] columnConfigs) {
+ final ConnectionSource connectionSource, final String tableName, final ColumnConfig[] columnConfigs) {
return getManager(
- name, new FactoryData(bufferSize, null, connectionSource, tableName, columnConfigs,
- new ColumnMapping[0], false, AbstractDatabaseAppender.DEFAULT_RECONNECT_INTERVAL_MILLIS, true),
- getFactory());
+ name, new FactoryData(bufferSize, null, connectionSource, tableName, columnConfigs,
+ ColumnMapping.EMPTY_ARRAY, false, AbstractDatabaseAppender.DEFAULT_RECONNECT_INTERVAL_MILLIS, true),
+ getFactory());
}
/**
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/PathCondition.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/PathCondition.java
index 5308177..d00a93a 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/PathCondition.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/PathCondition.java
@@ -28,7 +28,7 @@ import java.util.Arrays;
public interface PathCondition {
/**
- * Empty array.
+ * The empty array.
*/
static final PathCondition[] EMPTY_ARRAY = {};
@@ -39,7 +39,7 @@ public interface PathCondition {
* @return a copy, never null.
*/
static PathCondition[] copy(PathCondition[] source) {
- return source == null ? new PathCondition[0] : Arrays.copyOf(source, source.length);
+ return source == null ? EMPTY_ARRAY : Arrays.copyOf(source, source.length);
}
/**
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
index 58c1e57..dc9d990 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
@@ -32,6 +32,11 @@ import org.apache.logging.log4j.util.PerformanceSensitive;
*/
public class AppenderControl extends AbstractFilterable {
+ /**
+ * The empty array.
+ */
+ static final AppenderControl[] EMPTY_ARRAY = {};
+
private final ThreadLocal<AppenderControl> recursive = new ThreadLocal<>();
private final Appender appender;
private final Level level;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControlArraySet.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControlArraySet.java
index b0bcab8..9886581 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControlArraySet.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControlArraySet.java
@@ -32,7 +32,7 @@ import org.apache.logging.log4j.util.PerformanceSensitive;
*/
@PerformanceSensitive
public class AppenderControlArraySet {
- private final AtomicReference<AppenderControl[]> appenderArray = new AtomicReference<>(new AppenderControl[0]);
+ private final AtomicReference<AppenderControl[]> appenderArray = new AtomicReference<>(AppenderControl.EMPTY_ARRAY);
/**
* Adds an AppenderControl to this set. If this set already contains the element, the call leaves the set unchanged
@@ -108,7 +108,7 @@ public class AppenderControlArraySet {
* @return the contents before this collection was cleared.
*/
public AppenderControl[] clear() {
- return appenderArray.getAndSet(new AppenderControl[0]);
+ return appenderArray.getAndSet(AppenderControl.EMPTY_ARRAY);
}
public boolean isEmpty() {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java
index 70bd425..ae6e0e4 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java
@@ -609,7 +609,7 @@ public abstract class ConfigurationFactory extends ConfigurationBuilderFactory {
LOGGER.warn("Invalid query parameter in {}", configLocations);
}
}
- return locations.toArray(new String[0]);
+ return locations.toArray(Strings.EMPTY_ARRAY);
}
return new String[] {uris[0]};
}
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationSource.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationSource.java
index 3de940b..5e6ef9b 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationSource.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationSource.java
@@ -17,7 +17,6 @@
package org.apache.logging.log4j.core.config;
-import javax.net.ssl.HttpsURLConnection;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
@@ -32,6 +31,8 @@ import java.net.URL;
import java.net.URLConnection;
import java.util.Objects;
+import javax.net.ssl.HttpsURLConnection;
+
import org.apache.logging.log4j.core.net.UrlConnectionFactory;
import org.apache.logging.log4j.core.net.ssl.LaxHostnameVerifier;
import org.apache.logging.log4j.core.net.ssl.SslConfiguration;
@@ -40,6 +41,7 @@ import org.apache.logging.log4j.core.util.AuthorizationProvider;
import org.apache.logging.log4j.core.util.FileUtils;
import org.apache.logging.log4j.core.util.Loader;
import org.apache.logging.log4j.core.util.Source;
+import org.apache.logging.log4j.util.Constants;
import org.apache.logging.log4j.util.LoaderUtil;
import org.apache.logging.log4j.util.PropertiesUtil;
@@ -48,18 +50,15 @@ import org.apache.logging.log4j.util.PropertiesUtil;
*/
public class ConfigurationSource {
- /** Empty byte array singleton. */
- private static final byte[] EMPTY_BYTE_ARRAY = new byte[0];
-
/**
* ConfigurationSource to use with Configurations that do not require a "real" configuration source.
*/
- public static final ConfigurationSource NULL_SOURCE = new ConfigurationSource(EMPTY_BYTE_ARRAY, null, 0);
+ public static final ConfigurationSource NULL_SOURCE = new ConfigurationSource(Constants.EMPTY_BYTE_ARRAY, null, 0);
/**
* ConfigurationSource to use with {@link org.apache.logging.log4j.core.config.composite.CompositeConfiguration}.
*/
- public static final ConfigurationSource COMPOSITE_SOURCE = new ConfigurationSource(EMPTY_BYTE_ARRAY, null, 0);
+ public static final ConfigurationSource COMPOSITE_SOURCE = new ConfigurationSource(Constants.EMPTY_BYTE_ARRAY, null, 0);
private static final String HTTPS = "https";
private final File file;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/CustomLevelConfig.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/CustomLevelConfig.java
index d28753d..b4172ec 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/CustomLevelConfig.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/CustomLevelConfig.java
@@ -31,6 +31,11 @@ import org.apache.logging.log4j.status.StatusLogger;
@Plugin(name = "CustomLevel", category = Core.CATEGORY_NAME, printObject = true)
public final class CustomLevelConfig {
+ /**
+ * The empty array.
+ */
+ static final CustomLevelConfig[] EMPTY_ARRAY = {};
+
private final String levelName;
private final int intLevel;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/CustomLevels.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/CustomLevels.java
index db6eab3..832e9c6 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/CustomLevels.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/CustomLevels.java
@@ -47,7 +47,7 @@ public final class CustomLevels {
@PluginFactory
public static CustomLevels createCustomLevels(//
@PluginElement("CustomLevels") final CustomLevelConfig[] customLevels) {
- return new CustomLevels(customLevels == null ? new CustomLevelConfig[0] : customLevels);
+ return new CustomLevels(customLevels == null ? CustomLevelConfig.EMPTY_ARRAY : customLevels);
}
/**
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/Property.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/Property.java
index 137fba8..076ae44 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/Property.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/Property.java
@@ -35,7 +35,7 @@ public final class Property {
/**
* @since 2.11.2
*/
- public static final Property[] EMPTY_ARRAY = new Property[0];
+ public static final Property[] EMPTY_ARRAY = {};
private static final Logger LOGGER = StatusLogger.getLogger();
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/Base64Converter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/Base64Converter.java
index e539f77..fb2c723 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/Base64Converter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/Base64Converter.java
@@ -21,6 +21,7 @@ import java.lang.reflect.Method;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.status.StatusLogger;
+import org.apache.logging.log4j.util.Constants;
import org.apache.logging.log4j.util.LoaderUtil;
/**
@@ -67,6 +68,6 @@ public class Base64Converter {
LOGGER.error("Error decoding string - " + ex.getMessage());
}
}
- return new byte[0];
+ return Constants.EMPTY_BYTE_ARRAY;
}
}
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/TypeConverters.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/TypeConverters.java
index e688874..ae54525 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/TypeConverters.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/TypeConverters.java
@@ -39,6 +39,7 @@ import org.apache.logging.log4j.core.appender.rolling.action.Duration;
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.util.CronExpression;
import org.apache.logging.log4j.status.StatusLogger;
+import org.apache.logging.log4j.util.Constants;
import org.apache.logging.log4j.util.LoaderUtil;
/**
@@ -109,7 +110,7 @@ public final class TypeConverters {
public byte[] convert(final String value) {
byte[] bytes;
if (value == null || value.isEmpty()) {
- bytes = new byte[0];
+ bytes = Constants.EMPTY_BYTE_ARRAY;
} else if (value.startsWith(PREFIX_BASE64)) {
final String lexicalXSDBase64Binary = value.substring(PREFIX_BASE64.length());
bytes = Base64Converter.parseBase64Binary(lexicalXSDBase64Binary);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/CompositeFilter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/CompositeFilter.java
index 5394bfb..b942bbb 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/CompositeFilter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/CompositeFilter.java
@@ -44,15 +44,14 @@ import org.apache.logging.log4j.util.PerformanceSensitive;
@PerformanceSensitive("allocation")
public final class CompositeFilter extends AbstractLifeCycle implements Iterable<Filter>, Filter {
- private static final Filter[] EMPTY_FILTERS = new Filter[0];
private final Filter[] filters;
private CompositeFilter() {
- this.filters = EMPTY_FILTERS;
+ this.filters = Filter.EMPTY_ARRAY;
}
private CompositeFilter(final Filter[] filters) {
- this.filters = filters == null ? EMPTY_FILTERS : filters;
+ this.filters = filters == null ? Filter.EMPTY_ARRAY : filters;
}
public CompositeFilter addFilter(final Filter filter) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractJacksonLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractJacksonLayout.java
index 1cdce04..f3bdbff 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractJacksonLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractJacksonLayout.java
@@ -261,7 +261,7 @@ abstract class AbstractJacksonLayout extends AbstractStringLayout {
private static ResolvableKeyValuePair[] prepareAdditionalFields(final Configuration config, final KeyValuePair[] additionalFields) {
if (additionalFields == null || additionalFields.length == 0) {
// No fields set
- return new ResolvableKeyValuePair[0];
+ return ResolvableKeyValuePair.EMPTY_ARRAY;
}
// Convert to specific class which already determines whether values needs lookup during serialization
@@ -374,6 +374,11 @@ abstract class AbstractJacksonLayout extends AbstractStringLayout {
}
protected static class ResolvableKeyValuePair {
+
+ /**
+ * The empty array.
+ */
+ static final ResolvableKeyValuePair[] EMPTY_ARRAY = {};
final String key;
final String value;
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 9f3bb4a..e3fcd81 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
@@ -455,7 +455,7 @@ public final class GelfLayout extends AbstractStringLayout {
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];
+ this.additionalFields = additionalFields != null ? additionalFields : KeyValuePair.EMPTY_ARRAY;
if (config == null) {
for (final KeyValuePair additionalField : this.additionalFields) {
if (valueNeedsLookup(additionalField.getValue())) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/LevelPatternSelector.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/LevelPatternSelector.java
index 0ea85f4..2c4ad4b 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/LevelPatternSelector.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/LevelPatternSelector.java
@@ -140,7 +140,7 @@ public class LevelPatternSelector implements PatternSelector, LocationAware {
try {
final List<PatternFormatter> list = parser.parse(property.getPattern(), alwaysWriteExceptions,
disableAnsi, noConsoleNoAnsi);
- PatternFormatter[] formatters = list.toArray(new PatternFormatter[0]);
+ PatternFormatter[] formatters = list.toArray(PatternFormatter.EMPTY_ARRAY);
formatterMap.put(property.getKey(), formatters);
for (int i = 0; !needsLocation && i < formatters.length; ++i) {
needsLocation = formatters[i].requiresLocation();
@@ -154,7 +154,7 @@ public class LevelPatternSelector implements PatternSelector, LocationAware {
try {
final List<PatternFormatter> list = parser.parse(defaultPattern, alwaysWriteExceptions, disableAnsi,
noConsoleNoAnsi);
- defaultFormatters = list.toArray(new PatternFormatter[0]);
+ defaultFormatters = list.toArray(PatternFormatter.EMPTY_ARRAY);
this.defaultPattern = defaultPattern;
for (int i = 0; !needsLocation && i < defaultFormatters.length; ++i) {
needsLocation = defaultFormatters[i].requiresLocation();
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/MarkerPatternSelector.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/MarkerPatternSelector.java
index 8b9da90..b6a78c5 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/MarkerPatternSelector.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/MarkerPatternSelector.java
@@ -140,7 +140,7 @@ public class MarkerPatternSelector implements PatternSelector, LocationAware {
try {
final List<PatternFormatter> list = parser.parse(property.getPattern(), alwaysWriteExceptions,
disableAnsi, noConsoleNoAnsi);
- PatternFormatter[] formatters = list.toArray(new PatternFormatter[0]);
+ PatternFormatter[] formatters = list.toArray(PatternFormatter.EMPTY_ARRAY);
formatterMap.put(property.getKey(), formatters);
for (int i = 0; !needsLocation && i < formatters.length; ++i) {
needsLocation = formatters[i].requiresLocation();
@@ -154,7 +154,7 @@ public class MarkerPatternSelector implements PatternSelector, LocationAware {
try {
final List<PatternFormatter> list = parser.parse(defaultPattern, alwaysWriteExceptions, disableAnsi,
noConsoleNoAnsi);
- defaultFormatters = list.toArray(new PatternFormatter[0]);
+ defaultFormatters = list.toArray(PatternFormatter.EMPTY_ARRAY);
this.defaultPattern = defaultPattern;
for (int i = 0; !needsLocation && i < defaultFormatters.length; ++i) {
needsLocation = defaultFormatters[i].requiresLocation();
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 4d3c978..e276237 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
@@ -396,7 +396,7 @@ public final class PatternLayout extends AbstractStringLayout {
final PatternParser parser = createPatternParser(configuration);
final List<PatternFormatter> list = parser.parse(pattern == null ? defaultPattern : pattern,
alwaysWriteExceptions, disableAnsi, noConsoleNoAnsi);
- final PatternFormatter[] formatters = list.toArray(new PatternFormatter[0]);
+ final PatternFormatter[] formatters = list.toArray(PatternFormatter.EMPTY_ARRAY);
return new PatternSerializer(formatters, replace);
} catch (final RuntimeException ex) {
throw new IllegalArgumentException("Cannot parse pattern '" + pattern + "'", ex);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/ScriptPatternSelector.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/ScriptPatternSelector.java
index addf5e3..fe21da2 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/ScriptPatternSelector.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/ScriptPatternSelector.java
@@ -165,7 +165,7 @@ public class ScriptPatternSelector implements PatternSelector, LocationAware {
for (final PatternMatch property : properties) {
try {
final List<PatternFormatter> list = parser.parse(property.getPattern(), alwaysWriteExceptions, disableAnsi, noConsoleNoAnsi);
- PatternFormatter[] formatters = list.toArray(new PatternFormatter[0]);
+ PatternFormatter[] formatters = list.toArray(PatternFormatter.EMPTY_ARRAY);
formatterMap.put(property.getKey(), formatters);
patternMap.put(property.getKey(), property.getPattern());
for (int i = 0; !needsLocation && i < formatters.length; ++i) {
@@ -177,7 +177,7 @@ public class ScriptPatternSelector implements PatternSelector, LocationAware {
}
try {
final List<PatternFormatter> list = parser.parse(defaultPattern, alwaysWriteExceptions, disableAnsi, noConsoleNoAnsi);
- defaultFormatters = list.toArray(new PatternFormatter[0]);
+ defaultFormatters = list.toArray(PatternFormatter.EMPTY_ARRAY);
this.defaultPattern = defaultPattern;
for (int i = 0; !needsLocation && i < defaultFormatters.length; ++i) {
needsLocation = defaultFormatters[i].requiresLocation();
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/AnsiEscape.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/AnsiEscape.java
index c831234..64ea554 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/AnsiEscape.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/AnsiEscape.java
@@ -23,6 +23,7 @@ import java.util.Map;
import org.apache.logging.log4j.core.util.Patterns;
import org.apache.logging.log4j.util.EnglishEnums;
+import org.apache.logging.log4j.util.Strings;
/**
* Converts text into ANSI escape sequences.
@@ -289,7 +290,7 @@ public enum AnsiEscape {
* @return a new map
*/
public static Map<String, String> createMap(final String[] values, final String[] dontEscapeKeys) {
- final String[] sortedIgnoreKeys = dontEscapeKeys != null ? dontEscapeKeys.clone() : new String[0];
+ final String[] sortedIgnoreKeys = dontEscapeKeys != null ? dontEscapeKeys.clone() : Strings.EMPTY_ARRAY;
Arrays.sort(sortedIgnoreKeys);
final Map<String, String> map = new HashMap<>();
for (final String string : values) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternFormatter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternFormatter.java
index 4ed2c6b..fd10374 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternFormatter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternFormatter.java
@@ -23,6 +23,12 @@ import org.apache.logging.log4j.core.impl.LocationAware;
*
*/
public class PatternFormatter {
+
+ /**
+ * The empty array.
+ */
+ public static final PatternFormatter[] EMPTY_ARRAY = {};
+
private final LogEventPatternConverter converter;
private final FormattingInfo field;
private final boolean skipFormattingInfo;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/KeyValuePair.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/KeyValuePair.java
index 3c3b11b..63ef493 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/KeyValuePair.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/KeyValuePair.java
@@ -32,6 +32,11 @@ import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory;
@Plugin(name = "KeyValuePair", category = Node.CATEGORY, printObject = true)
public final class KeyValuePair {
+ /**
+ * The empty array.
+ */
+ public static final KeyValuePair[] EMPTY_ARRAY = {};
+
private final String key;
private final String value;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/UuidUtil.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/UuidUtil.java
index 3ed80e5..4f5eb39 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/UuidUtil.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/UuidUtil.java
@@ -31,6 +31,9 @@ import org.apache.logging.log4j.util.PropertiesUtil;
* less than 10,000 IDs are generated per millisecond on the same device (as identified by its MAC address).
*/
public final class UuidUtil {
+
+ private static final long[] EMPTY_LONG_ARRAY = {};
+
/**
* System property that may be used to seed the UUID generation with an integer value.
*/
@@ -88,7 +91,7 @@ public final class UuidUtil {
String assigned = PropertiesUtil.getProperties().getStringProperty(ASSIGNED_SEQUENCES);
long[] sequences;
if (assigned == null) {
- sequences = new long[0];
+ sequences = EMPTY_LONG_ARRAY;
} else {
final String[] array = assigned.split(Patterns.COMMA_SEPARATOR);
sequences = new long[array.length];
diff --git a/log4j-core/src/test/java/org/apache/logging/dumbster/smtp/SmtpMessage.java b/log4j-core/src/test/java/org/apache/logging/dumbster/smtp/SmtpMessage.java
index 967bb5e..93e38d1 100644
--- a/log4j-core/src/test/java/org/apache/logging/dumbster/smtp/SmtpMessage.java
+++ b/log4j-core/src/test/java/org/apache/logging/dumbster/smtp/SmtpMessage.java
@@ -23,6 +23,8 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.apache.logging.log4j.util.Strings;
+
/**
* Container for a complete SMTP message - headers and message body.
*/
@@ -84,7 +86,7 @@ public class SmtpMessage {
public String[] getHeaderValues(final String name) {
final List<String> values = headers.get(name);
if (values == null) {
- return new String[0];
+ return Strings.EMPTY_ARRAY;
}
return values.toArray(new String[values.size()]);
}
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/jeromq/JeroMqTestClient.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/jeromq/JeroMqTestClient.java
index a1104ac..3807a96 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/jeromq/JeroMqTestClient.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/jeromq/JeroMqTestClient.java
@@ -21,6 +21,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
+import org.apache.logging.log4j.util.Constants;
import org.zeromq.ZMQ;
class JeroMqTestClient implements Callable<List<String>> {
@@ -42,7 +43,7 @@ class JeroMqTestClient implements Callable<List<String>> {
public List<String> call() throws Exception {
try (ZMQ.Socket subscriber = context.socket(ZMQ.SUB)) {
subscriber.connect(endpoint);
- subscriber.subscribe(new byte[0]);
+ subscriber.subscribe(Constants.EMPTY_BYTE_ARRAY);
for (int messageNum = 0; messageNum < receiveCount
&& !Thread.currentThread().isInterrupted(); messageNum++) {
// Use trim to remove the tailing '0' character
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerTestArgumentFreedOnError.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerTestArgumentFreedOnError.java
index 5f9f4b5..bba8007 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerTestArgumentFreedOnError.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerTestArgumentFreedOnError.java
@@ -16,6 +16,11 @@
*/
package org.apache.logging.log4j.core.async;
+import static org.junit.Assert.assertTrue;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.categories.AsyncLoggers;
import org.apache.logging.log4j.core.GarbageCollectionHelper;
@@ -28,11 +33,6 @@ import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.experimental.categories.Category;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-import static org.junit.Assert.assertTrue;
-
@Category(AsyncLoggers.class)
public class AsyncLoggerTestArgumentFreedOnError {
@@ -88,12 +88,12 @@ public class AsyncLoggerTestArgumentFreedOnError {
@Override
public String getFormat() {
- return "";
+ return Strings.EMPTY;
}
@Override
public Object[] getParameters() {
- return new Object[0];
+ return org.apache.logging.log4j.util.Constants.EMPTY_OBJECT_ARRAY;
}
@Override
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerTest3.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerTest3.java
index 2ec737c..af9dd96 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerTest3.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerTest3.java
@@ -16,6 +16,11 @@
*/
package org.apache.logging.log4j.core.async;
+import static org.junit.Assert.assertTrue;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.categories.AsyncLoggers;
@@ -34,11 +39,6 @@ import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-import static org.junit.Assert.assertTrue;
-
/**
* Tests queue full scenarios with pure AsyncLoggers (all loggers async).
*/
@@ -114,7 +114,7 @@ public class QueueFullAsyncLoggerTest3 extends QueueFullAbstractTest {
@Override
public Object[] getParameters() {
- return new Object[0];
+ return org.apache.logging.log4j.util.Constants.EMPTY_OBJECT_ARRAY;
}
@Override
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ThrowableProxyTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ThrowableProxyTest.java
index 39172c7..4900476 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ThrowableProxyTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ThrowableProxyTest.java
@@ -16,6 +16,13 @@
*/
package org.apache.logging.log4j.core.impl;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -29,23 +36,24 @@ import java.security.SecureRandom;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
+
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.IvParameterSpec;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.config.plugins.convert.Base64Converter;
import org.apache.logging.log4j.core.jackson.Log4jJsonObjectMapper;
import org.apache.logging.log4j.core.jackson.Log4jXmlObjectMapper;
import org.apache.logging.log4j.core.pattern.PlainTextRenderer;
+import org.apache.logging.log4j.util.Constants;
import org.apache.logging.log4j.util.Strings;
import org.junit.jupiter.api.Test;
-import static org.junit.jupiter.api.Assertions.*;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.ObjectMapper;
/**
*
@@ -194,7 +202,7 @@ public class ThrowableProxyTest {
generator.init(128);
final IvParameterSpec algorithmParameterSpec = new IvParameterSpec(bytes);
ec.init(Cipher.ENCRYPT_MODE, generator.generateKey(), algorithmParameterSpec, secureRandom);
- final byte[] raw = new byte[0];
+ final byte[] raw = Constants.EMPTY_BYTE_ARRAY;
final byte[] encrypted = ec.doFinal(raw);
final Cipher dc = Cipher.getInstance(algorithm);
dc.init(Cipher.DECRYPT_MODE, generator.generateKey(), algorithmParameterSpec, secureRandom);
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterTest.java
index b735aa4..2e217e8 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterTest.java
@@ -319,7 +319,7 @@ public class DatePatternConverterTest {
@Test
public void testGetPatternReturnsDefaultForEmptyOptionsArray() {
- assertEquals(DEFAULT_PATTERN, DatePatternConverter.newInstance(new String[0]).getPattern());
+ assertEquals(DEFAULT_PATTERN, DatePatternConverter.newInstance(Strings.EMPTY_ARRAY).getPattern());
}
@Test
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/util/AssertTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/util/AssertTest.java
index 56c4299..0216e88 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/util/AssertTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/util/AssertTest.java
@@ -16,6 +16,8 @@
*/
package org.apache.logging.log4j.core.util;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -23,8 +25,6 @@ import java.util.HashMap;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
public class AssertTest {
public static Object[][] data() {
@@ -32,7 +32,7 @@ public class AssertTest {
// value, isEmpty
{null, true},
{"", true},
- {new Object[0], true},
+ {org.apache.logging.log4j.util.Constants.EMPTY_OBJECT_ARRAY, true},
{new ArrayList<>(), true},
{new HashMap<>(), true},
{0, false},
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/util/datetime/FixedDateFormatTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/util/datetime/FixedDateFormatTest.java
index 43c710a..434335f 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/util/datetime/FixedDateFormatTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/util/datetime/FixedDateFormatTest.java
@@ -31,6 +31,7 @@ import java.util.TimeZone;
import java.util.concurrent.TimeUnit;
import org.apache.logging.log4j.core.util.datetime.FixedDateFormat.FixedFormat;
+import org.apache.logging.log4j.util.Strings;
import org.junit.Test;
/**
@@ -62,7 +63,7 @@ public class FixedDateFormatTest {
@Test
public void testCreateIfSupported_defaultIfOptionsArrayEmpty() {
- final FixedDateFormat fmt = FixedDateFormat.createIfSupported(new String[0]);
+ final FixedDateFormat fmt = FixedDateFormat.createIfSupported(Strings.EMPTY_ARRAY);
assertEquals(DEFAULT.getPattern(), fmt.getFormat());
}
diff --git a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEvent.java b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEvent.java
index cee5d9c..045f3dd 100644
--- a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEvent.java
+++ b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEvent.java
@@ -39,6 +39,7 @@ import org.apache.logging.log4j.message.MapMessage;
import org.apache.logging.log4j.message.Message;
import org.apache.logging.log4j.message.StructuredDataId;
import org.apache.logging.log4j.message.StructuredDataMessage;
+import org.apache.logging.log4j.util.Constants;
import org.apache.logging.log4j.util.ReadOnlyStringMap;
import org.apache.logging.log4j.util.Strings;
@@ -188,7 +189,7 @@ public class FlumeEvent extends SimpleEvent implements LogEvent {
@Override
public void setBody(final byte[] body) {
if (body == null || body.length == 0) {
- super.setBody(new byte[0]);
+ super.setBody(Constants.EMPTY_BYTE_ARRAY);
return;
}
if (compress) {
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 9276fd3..59336c8 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
@@ -139,7 +139,7 @@ public class JsonTemplateLayout implements StringLayout {
final EventTemplateAdditionalField[] eventTemplateAdditionalFields =
builder.eventTemplateAdditionalFields != null
? builder.eventTemplateAdditionalFields
- : new EventTemplateAdditionalField[0];
+ : EventTemplateAdditionalField.EMPTY_ARRAY;
// Create the resolver context.
final EventResolverContext resolverContext = EventResolverContext
@@ -535,6 +535,8 @@ public class JsonTemplateLayout implements StringLayout {
printObject = true)
public static final class EventTemplateAdditionalField {
+ static final EventTemplateAdditionalField[] EMPTY_ARRAY = {};
+
public enum Format { STRING, JSON }
private final String key;
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/GelfLayoutBenchmark.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/GelfLayoutBenchmark.java
index dd64055..0a4d353 100644
--- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/GelfLayoutBenchmark.java
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/GelfLayoutBenchmark.java
@@ -50,7 +50,7 @@ public class GelfLayoutBenchmark {
private static final CharSequence MESSAGE =
"This is rather long and chatty log message with quite some interesting information and a bit of fun in it which is suitable here";
private static final LogEvent EVENT = createLogEvent();
- private static final KeyValuePair[] ADDITIONAL_FIELDS = new KeyValuePair[0];
+ private static final KeyValuePair[] ADDITIONAL_FIELDS = KeyValuePair.EMPTY_ARRAY;
private static LogEvent createLogEvent() {
final Marker marker = null;
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/nogc/NoGcLayout.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/nogc/NoGcLayout.java
index 62bbf50..0eedb28 100644
--- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/nogc/NoGcLayout.java
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/nogc/NoGcLayout.java
@@ -37,6 +37,9 @@ import java.util.Map;
* </p>
*/
public class NoGcLayout implements Layout<Serializable> {
+
+ private static final byte[] EMPTY_BYTE_ARRAY = {};
+
private final StringBuilder cachedStringBuilder = new StringBuilder(2048);
private final PatternSerializer2 serializer = new PatternSerializer2();
private final StringBuilderEncoder cachedHelper;
@@ -103,12 +106,12 @@ public class NoGcLayout implements Layout<Serializable> {
@Override
public byte[] getFooter() {
- return new byte[0];
+ return EMPTY_BYTE_ARRAY;
}
@Override
public byte[] getHeader() {
- return new byte[0];
+ return EMPTY_BYTE_ARRAY;
}
@Override
diff --git a/log4j-spring-boot/src/main/java/org/apache/logging/log4j/spring/boot/Log4j2CloudConfigLoggingSystem.java b/log4j-spring-boot/src/main/java/org/apache/logging/log4j/spring/boot/Log4j2CloudConfigLoggingSystem.java
index 2ebe9ce..05f378c 100644
--- a/log4j-spring-boot/src/main/java/org/apache/logging/log4j/spring/boot/Log4j2CloudConfigLoggingSystem.java
+++ b/log4j-spring-boot/src/main/java/org/apache/logging/log4j/spring/boot/Log4j2CloudConfigLoggingSystem.java
@@ -46,6 +46,7 @@ import org.apache.logging.log4j.core.util.AuthorizationProvider;
import org.apache.logging.log4j.core.util.FileUtils;
import org.apache.logging.log4j.status.StatusLogger;
import org.apache.logging.log4j.util.PropertiesUtil;
+import org.apache.logging.log4j.util.Strings;
import org.springframework.boot.logging.LogFile;
import org.springframework.boot.logging.LoggingInitializationContext;
import org.springframework.boot.logging.log4j2.Log4J2LoggingSystem;
@@ -88,7 +89,7 @@ public class Log4j2CloudConfigLoggingSystem extends Log4J2LoggingSystem {
if (location != null) {
List<String> list = new ArrayList<>(Arrays.asList(super.getStandardConfigLocations()));
list.add(location);
- locations = list.toArray(new String[0]);
+ locations = list.toArray(Strings.EMPTY_ARRAY);
}
return locations;
}
@@ -174,7 +175,7 @@ public class Log4j2CloudConfigLoggingSystem extends Log4J2LoggingSystem {
LOGGER.warn("Bad data in configuration string: {}", pair);
}
}
- return locations.toArray(new String[0]);
+ return locations.toArray(Strings.EMPTY_ARRAY);
} catch (MalformedURLException ex) {
LOGGER.warn("Unable to parse configuration URL {}", configLocations);
}
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index b5dc341..f0f253d 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -217,6 +217,9 @@
<action issue="LOG4J2-3131" dev="ggregory" type="fix" due-to="Adam Long, Gary Gregory">
Attempting to call getExtendedStackTraceAsString() after deserializing JSON LogEvent results in a NPE.
</action>
+ <action issue="LOG4J2-3131" dev="ggregory" type="fix" due-to="Gary Gregory">
+ NoGcLayout allocates empty bytes arrays for its header and footer.
+ </action>
<!-- ADDS -->
<action issue="LOG4J2-2962" dev="vy" type="add">
Enrich "map" resolver by unifying its backend with "mdc" resolver.