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 2022/03/31 04:36:23 UTC
[logging-log4j2] branch release-2.x updated: LOG4J2-3458 LocalizedMessage logs misleading errors on the console.
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 5eaeb95 LOG4J2-3458 LocalizedMessage logs misleading errors on the console.
5eaeb95 is described below
commit 5eaeb95760b9d4460288fde9c7af3f2cf98765ae
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Thu Mar 31 00:36:17 2022 -0400
LOG4J2-3458 LocalizedMessage logs misleading errors on the console.
---
.../log4j/message/StringFormattedMessage.java | 4 +++
.../log4j/message/LocalizedMessageFactoryTest.java | 38 +++++++++++++---------
.../log4j/message/StringFormattedMessageTest.java | 22 +++++++++++++
src/changes/changes.xml | 3 ++
4 files changed, 52 insertions(+), 15 deletions(-)
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/StringFormattedMessage.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/StringFormattedMessage.java
index a99e2ef..efcec4c 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/message/StringFormattedMessage.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/StringFormattedMessage.java
@@ -112,6 +112,10 @@ public class StringFormattedMessage implements Message {
}
protected String formatMessage(final String msgPattern, final Object... args) {
+ if (args != null && args.length == 0) {
+ // Avoids some exceptions for LOG4J2-3458
+ return msgPattern;
+ }
try {
return String.format(locale, msgPattern, args);
} catch (final IllegalFormatException ife) {
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/message/LocalizedMessageFactoryTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/message/LocalizedMessageFactoryTest.java
index 940ea23..d76de04 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/message/LocalizedMessageFactoryTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/message/LocalizedMessageFactoryTest.java
@@ -16,12 +16,12 @@
*/
package org.apache.logging.log4j.message;
-import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
import java.util.Locale;
import java.util.ResourceBundle;
-import static org.junit.jupiter.api.Assertions.assertEquals;
+import org.junit.jupiter.api.Test;
/**
* Tests {@link LocalizedMessageFactory}.
@@ -57,25 +57,33 @@ public class LocalizedMessageFactoryTest {
}
@Test
- public void testNoMatchPercentInMessage() {
- // Logs the following to the console sadly:
+ public void testNoMatchPercentInMessageNoArgsNo() {
+ // LOG4J2-3458 LocalizedMessage causes a lot of noise on the console
//
// ERROR StatusLogger Unable to format msg: C:/Program%20Files/Some%20Company/Some%20Product%20Name/
// java.util.UnknownFormatConversionException: Conversion = 'F'
- // at java.util.Formatter$FormatSpecifier.conversion(Formatter.java:2691)
- // at java.util.Formatter$FormatSpecifier.<init>(Formatter.java:2720)
- // at java.util.Formatter.parse(Formatter.java:2560)
- // at java.util.Formatter.format(Formatter.java:2501)
- // at java.util.Formatter.format(Formatter.java:2455)
- // at java.lang.String.format(String.java:2981)
- // at org.apache.logging.log4j.message.StringFormattedMessage.formatMessage(StringFormattedMessage.java:116)
- // at org.apache.logging.log4j.message.StringFormattedMessage.getFormattedMessage(StringFormattedMessage.java:88)
- // at org.apache.logging.log4j.message.FormattedMessage.getFormattedMessage(FormattedMessage.java:178)
- // at org.apache.logging.log4j.message.LocalizedMessage.getFormattedMessage(LocalizedMessage.java:196)
- // at org.apache.logging.log4j.message.LocalizedMessageFactoryTest.testNoMatchPercentInMessage(LocalizedMessageFactoryTest.java:60)
+ // at java.util.Formatter$FormatSpecifier.conversion(Formatter.java:2691)
+ // at java.util.Formatter$FormatSpecifier.<init>(Formatter.java:2720)
+ // at java.util.Formatter.parse(Formatter.java:2560)
+ // at java.util.Formatter.format(Formatter.java:2501)
+ // at java.util.Formatter.format(Formatter.java:2455)
+ // at java.lang.String.format(String.java:2981)
+ // at org.apache.logging.log4j.message.StringFormattedMessage.formatMessage(StringFormattedMessage.java:116)
+ // at org.apache.logging.log4j.message.StringFormattedMessage.getFormattedMessage(StringFormattedMessage.java:88)
+ // at org.apache.logging.log4j.message.FormattedMessage.getFormattedMessage(FormattedMessage.java:178)
+ // at org.apache.logging.log4j.message.LocalizedMessage.getFormattedMessage(LocalizedMessage.java:196)
+ // at
+ // org.apache.logging.log4j.message.LocalizedMessageFactoryTest.testNoMatchPercentInMessage(LocalizedMessageFactoryTest.java:60)
//
final LocalizedMessageFactory localizedMessageFactory = new LocalizedMessageFactory(ResourceBundle.getBundle("MF", Locale.US));
final Message message = localizedMessageFactory.newMessage("C:/Program%20Files/Some%20Company/Some%20Product%20Name/");
assertEquals("C:/Program%20Files/Some%20Company/Some%20Product%20Name/", message.getFormattedMessage());
}
+
+ @Test
+ public void testNoMatchPercentInMessageArgsYes() {
+ final LocalizedMessageFactory localizedMessageFactory = new LocalizedMessageFactory(ResourceBundle.getBundle("MF", Locale.US));
+ final Message message = localizedMessageFactory.newMessage("C:/Program%20Files/Some%20Company/Some%20Product%20Name/{0}", "One");
+ assertEquals("C:/Program%20Files/Some%20Company/Some%20Product%20Name/One", message.getFormattedMessage());
+ }
}
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/message/StringFormattedMessageTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/message/StringFormattedMessageTest.java
index 0dd8041..2dd6a8d 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/message/StringFormattedMessageTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/message/StringFormattedMessageTest.java
@@ -22,6 +22,7 @@ import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Locale;
+import java.util.ResourceBundle;
import org.apache.logging.log4j.junit.Mutable;
import org.junit.jupiter.api.Test;
@@ -128,4 +129,25 @@ public class StringFormattedMessageTest {
assertEquals(expected.getFormattedMessage(), actual.getFormattedMessage());
assertArrayEquals(expected.getParameters(), actual.getParameters());
}
+
+ @Test
+ public void testPercentInMessageNoArgs() {
+ // LOG4J2-3458 LocalizedMessage causes a lot of noise on the console
+ //
+ // ERROR StatusLogger Unable to format msg: C:/Program%20Files/Some%20Company/Some%20Product%20Name/
+ // java.util.UnknownFormatConversionException: Conversion = 'F'
+ // at java.util.Formatter$FormatSpecifier.conversion(Formatter.java:2691)
+ // at java.util.Formatter$FormatSpecifier.<init>(Formatter.java:2720)
+ // at java.util.Formatter.parse(Formatter.java:2560)
+ // at java.util.Formatter.format(Formatter.java:2501)
+ // at java.util.Formatter.format(Formatter.java:2455)
+ // at java.lang.String.format(String.java:2981)
+ // at org.apache.logging.log4j.message.StringFormattedMessage.formatMessage(StringFormattedMessage.java:120)
+ // at org.apache.logging.log4j.message.StringFormattedMessage.getFormattedMessage(StringFormattedMessage.java:88)
+ // at
+ // org.apache.logging.log4j.message.StringFormattedMessageTest.testPercentInMessageNoArgs(StringFormattedMessageTest.java:153)
+ final StringFormattedMessage msg = new StringFormattedMessage("C:/Program%20Files/Some%20Company/Some%20Product%20Name/", new Object[] {});
+ assertEquals("C:/Program%20Files/Some%20Company/Some%20Product%20Name/", msg.getFormattedMessage());
+ }
+
}
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 5b1dc04..d3d5b5d 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -79,6 +79,9 @@
<action issue="LOG4J2-3452" dev="stefanvodita" type="fix" due-to="Stefan Vodita">
Fix and test for race condition in FileUtils.mkdir().
</action>
+ <action issue="LOG4J2-3458" dev="ggregory" type="fix" due-to="Gary Gregory">
+ LocalizedMessage logs misleading errors on the console.
+ </action>
<!-- UPDATES -->
<action issue="LOG4J2-3428" dev="ggregory" type="fix" due-to="LF-Lin">
Update 3rd party dependencies for 2.17.3.