This is an automated email from the ASF dual-hosted git repository.
pkarwasz pushed a commit to branch 2.x
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
The following commit(s) were added to refs/heads/2.x by this push:
new 33fff89edc Fix warning when last argument is null (#4014)
33fff89edc is described below
commit 33fff89edc688ae64e44424abef122c13cc1f5be
Author: lrozenblyum <[email protected]>
AuthorDate: Mon Dec 29 14:11:59 2025 +0200
Fix warning when last argument is null (#4014)
---
.../logging/log4j/message/ParameterFormatterTest.java | 13 +++++++++++++
.../apache/logging/log4j/message/ParameterFormatter.java | 8 +++++++-
.../.2.x.x/3975_prevent_warning_for_last_null_argument.xml | 14 ++++++++++++++
3 files changed, 34 insertions(+), 1 deletion(-)
diff --git
a/log4j-api-test/src/test/java/org/apache/logging/log4j/message/ParameterFormatterTest.java
b/log4j-api-test/src/test/java/org/apache/logging/log4j/message/ParameterFormatterTest.java
index e4988f4141..37c4a2b7bb 100644
---
a/log4j-api-test/src/test/java/org/apache/logging/log4j/message/ParameterFormatterTest.java
+++
b/log4j-api-test/src/test/java/org/apache/logging/log4j/message/ParameterFormatterTest.java
@@ -98,6 +98,19 @@ class ParameterFormatterTest {
placeholderCount, argCount, pattern);
}
+ @Test
+ void format_should_not_warn_on_insufficient_args() {
+ final String expectedMessage = "pan a";
+ final String pattern = "pan {}";
+ final String[] args = new String[] {"a", null};
+ final int argCount = args.length;
+
+ String actualMessage = ParameterFormatter.format(pattern, args,
argCount);
+ assertThat(actualMessage).isEqualTo(expectedMessage);
+ final List<StatusData> statusDataList =
statusListener.getStatusData().collect(Collectors.toList());
+ assertThat(statusDataList).isEmpty();
+ }
+
@ParameterizedTest
@MethodSource("messageFormattingTestCases")
void format_should_work(
diff --git
a/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterFormatter.java
b/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterFormatter.java
index 551f02c7f7..df2d44d83e 100644
---
a/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterFormatter.java
+++
b/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterFormatter.java
@@ -247,7 +247,7 @@ final class ParameterFormatter {
// #2380: check if the count of placeholder is not equal to the count
of arguments
if (analysis.placeholderCount != argCount) {
final int noThrowableArgCount =
- argCount < 1 ? 0 : argCount - ((args[argCount - 1]
instanceof Throwable) ? 1 : 0);
+ argCount < 1 ? 0 : argCount -
(isLastArgumentThrowable(args, argCount) ? 1 : 0);
if (analysis.placeholderCount != noThrowableArgCount) {
STATUS_LOGGER.warn(
"found {} argument placeholders, but provided {} for
pattern `{}`",
@@ -268,6 +268,12 @@ final class ParameterFormatter {
}
}
+ private static boolean isLastArgumentThrowable(final Object[] args, final
int argCount) {
+ final Object lastArgument = args[argCount - 1];
+ // #3975: tolerate null in the last argument since it could have been
Throwable parameter
+ return (lastArgument == null) || (lastArgument instanceof Throwable);
+ }
+
private static void formatMessageContainingNoEscapes(
final StringBuilder buffer,
final String pattern,
diff --git
a/src/changelog/.2.x.x/3975_prevent_warning_for_last_null_argument.xml
b/src/changelog/.2.x.x/3975_prevent_warning_for_last_null_argument.xml
new file mode 100644
index 0000000000..9c96386fac
--- /dev/null
+++ b/src/changelog/.2.x.x/3975_prevent_warning_for_last_null_argument.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entry xmlns="https://logging.apache.org/xml/ns"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="
+ https://logging.apache.org/xml/ns
+ https://logging.apache.org/xml/ns/log4j-changelog-0.xsd"
+ type="changed">
+ <issue id="3975"
link="https://github.com/apache/logging-log4j2/issues/3975"/>
+ <issue id="4014"
link="https://github.com/apache/logging-log4j2/pull/4014"/>
+ <description format="asciidoc">
+ Prevent ParameterFormatter issuing a warning in case there is an extra
null argument.
+ Needed to support cases with Throwable parameter that may be null.
+ </description>
+</entry>