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 05:02:38 UTC
[logging-log4j2] branch master 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 master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
The following commit(s) were added to refs/heads/master by this push:
new 55a0147 [LOG4J2-3458] LocalizedMessage logs misleading errors on the console.
55a0147 is described below
commit 55a0147ec3cef9cd87c9f96e5ceb202eeb487249
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Thu Mar 31 01:02:29 2022 -0400
[LOG4J2-3458] LocalizedMessage logs misleading errors on the console.
Can't cherry-pick from release-2.x.
---
.../log4j/message/LocalizedMessageFactoryTest.java | 57 ++++++++++++++++++++--
.../log4j/message/StringFormattedMessageTest.java | 21 ++++++++
.../log4j/message/StringFormattedMessage.java | 4 ++
src/changes/changes.xml | 6 +++
4 files changed, 85 insertions(+), 3 deletions(-)
diff --git a/log4j-api-test/src/test/java/org/apache/logging/log4j/message/LocalizedMessageFactoryTest.java b/log4j-api-test/src/test/java/org/apache/logging/log4j/message/LocalizedMessageFactoryTest.java
index 6c6571b..6881cd9 100644
--- a/log4j-api-test/src/test/java/org/apache/logging/log4j/message/LocalizedMessageFactoryTest.java
+++ b/log4j-api-test/src/test/java/org/apache/logging/log4j/message/LocalizedMessageFactoryTest.java
@@ -33,13 +33,26 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
public class LocalizedMessageFactoryTest {
@Test
+ public void testMessageMarkersDataNo() {
+ final LocalizedMessageFactory localizedMessageFactory = new LocalizedMessageFactory(ResourceBundle.getBundle("MF", Locale.US));
+ final Message message = localizedMessageFactory.newMessage("msg1");
+ assertEquals("This is test number {0} with string argument {1}.", message.getFormattedMessage());
+ }
+
+ @Test
+ public void testMessageMarkersNoDataYes() {
+ final LocalizedMessageFactory localizedMessageFactory = new LocalizedMessageFactory(ResourceBundle.getBundle("MF", Locale.US));
+ final Message message = localizedMessageFactory.newMessage("msg1", 1, "two");
+ assertEquals("This is test number 1 with string argument two.", message.getFormattedMessage());
+ }
+
+ @Test
public void testNewMessage() {
- final LocalizedMessageFactory localizedMessageFactory = new LocalizedMessageFactory(
- ResourceBundle.getBundle("MF", Locale.US));
+ final LocalizedMessageFactory localizedMessageFactory = new LocalizedMessageFactory(ResourceBundle.getBundle("MF", Locale.US));
final Message message = localizedMessageFactory.newMessage("hello_world");
assertEquals("Hello world.", message.getFormattedMessage());
}
-
+
@Test
@ResourceLock(Resources.LOCALE)
public void testNewMessageUsingBaseName() {
@@ -54,4 +67,42 @@ public class LocalizedMessageFactoryTest {
Locale.setDefault(defaultLocale);
}
}
+
+ @Test
+ public void testNoMatch() {
+ final LocalizedMessageFactory localizedMessageFactory = new LocalizedMessageFactory(ResourceBundle.getBundle("MF", Locale.US));
+ final Message message = localizedMessageFactory.newMessage("no match");
+ assertEquals("no match", 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());
+ }
+
+ @Test
+ 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)
+ //
+ 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());
+ }
}
diff --git a/log4j-api-test/src/test/java/org/apache/logging/log4j/message/StringFormattedMessageTest.java b/log4j-api-test/src/test/java/org/apache/logging/log4j/message/StringFormattedMessageTest.java
index ddd96a6..08035a3 100644
--- a/log4j-api-test/src/test/java/org/apache/logging/log4j/message/StringFormattedMessageTest.java
+++ b/log4j-api-test/src/test/java/org/apache/logging/log4j/message/StringFormattedMessageTest.java
@@ -129,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/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 a366a24..dbc0daa 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
@@ -113,6 +113,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/src/changes/changes.xml b/src/changes/changes.xml
index 6ebb56b..340d9d5 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -191,6 +191,12 @@
Fixes incorrect constructor call in LocalizedMessageFactory.
</action>
</release>
+ <release version="2.17.3" date="20YY-MM-DD" description="GA Release 2.17.3">
+ <!-- FIXES -->
+ <action issue="LOG4J2-3458" dev="ggregory" type="fix" due-to="Gary Gregory">
+ LocalizedMessage logs misleading errors on the console.
+ </action>
+ </release>
<release version="2.17.2" date="20YY-MM-DD" description="GA Release 2.17.2">
<!-- FIXES -->
<action issue="LOG4J2-3304" dev="rgoers" type="fix" due-to="francis-FY">