You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rg...@apache.org on 2023/01/02 16:05:03 UTC
[logging-log4j2] 01/02: LOG4J2-2297 - Allow java.sql.Time objects to format properly in MapMessages.
This is an automated email from the ASF dual-hosted git repository.
rgoers pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 7b10ba69cc2af35c666af66fc54656f76cd0b152
Author: Ralph Goers <rg...@apache.org>
AuthorDate: Mon Jan 2 09:04:00 2023 -0700
LOG4J2-2297 - Allow java.sql.Time objects to format properly in MapMessages.
---
.../logging/log4j/message/MapMessageTest.java | 17 ++++++++++----
log4j-api/src/main/java/module-info.java | 1 +
.../apache/logging/log4j/util/StringBuilders.java | 26 ++++++++++++++++++++++
src/changes/changes.xml | 3 +++
4 files changed, 43 insertions(+), 4 deletions(-)
diff --git a/log4j-api-test/src/test/java/org/apache/logging/log4j/message/MapMessageTest.java b/log4j-api-test/src/test/java/org/apache/logging/log4j/message/MapMessageTest.java
index d420e2bf7f..106cce2c97 100644
--- a/log4j-api-test/src/test/java/org/apache/logging/log4j/message/MapMessageTest.java
+++ b/log4j-api-test/src/test/java/org/apache/logging/log4j/message/MapMessageTest.java
@@ -16,17 +16,18 @@
*/
package org.apache.logging.log4j.message;
-import org.apache.logging.log4j.util.StringBuilderFormattable;
-import org.apache.logging.log4j.util.Strings;
-import org.junit.jupiter.api.Test;
-
import java.math.BigDecimal;
+import java.sql.Time;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
+import org.apache.logging.log4j.util.StringBuilderFormattable;
+import org.apache.logging.log4j.util.Strings;
+import org.junit.jupiter.api.Test;
+
import static org.junit.jupiter.api.Assertions.*;
/**
@@ -311,6 +312,14 @@ public class MapMessageTest {
assertEquals(expected, result);
}
+ @Test
+ public void testTime() throws Exception {
+ final Time time = new Time(12, 5, 5);
+ final ObjectMapMessage message = new ObjectMapMessage().with("time", time);
+ assertEquals("time=\"" + time.toString() + "\"",
+ message.getFormattedMessage(), "Incorrect time format");
+ }
+
private static final class FormattableTestType implements StringBuilderFormattable {
@Override
diff --git a/log4j-api/src/main/java/module-info.java b/log4j-api/src/main/java/module-info.java
index 732b3d595d..57f500e63e 100644
--- a/log4j-api/src/main/java/module-info.java
+++ b/log4j-api/src/main/java/module-info.java
@@ -38,6 +38,7 @@ module org.apache.logging.log4j {
exports org.apache.logging.log4j.status;
exports org.apache.logging.log4j.util;
+ requires static java.sql;
requires static org.osgi.framework;
uses org.apache.logging.log4j.spi.Provider;
uses PropertySource;
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/StringBuilders.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/StringBuilders.java
index e5b0e53273..d0c931d039 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/StringBuilders.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/StringBuilders.java
@@ -16,6 +16,8 @@
*/
package org.apache.logging.log4j.util;
+import java.lang.reflect.Array;
+import java.util.Collections;
import java.util.Map.Entry;
import static java.lang.Character.toLowerCase;
@@ -25,6 +27,21 @@ import static java.lang.Character.toLowerCase;
*/
@InternalApi
public final class StringBuilders {
+
+ private static final Object timeClass;
+
+ static {
+ Object obj;
+ try {
+ Class<?> clazz = Class.forName("java.sql.Time");
+ long current = System.currentTimeMillis();
+ obj = clazz.getDeclaredConstructor(Long.TYPE).newInstance(current);
+ } catch(Exception ex) {
+ obj = null;
+ }
+ timeClass = obj;
+ }
+
private StringBuilders() {
}
@@ -118,12 +135,21 @@ public final class StringBuilders {
stringBuilder.append(((Float) obj).floatValue());
} else if (obj instanceof Byte) {
stringBuilder.append(((Byte) obj).byteValue());
+ } else if (isTime(obj) || obj instanceof java.time.temporal.Temporal) {
+ stringBuilder.append(obj);
} else {
return false;
}
return true;
}
+ /*
+ Check to see if obj is an instance of java.sql.time without requiring the java.sql module.
+ */
+ private static boolean isTime(final Object obj) {
+ return obj.getClass().isInstance(timeClass);
+ }
+
/**
* Returns true if the specified section of the left CharSequence equals the specified section of the right
* CharSequence.
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index f3d8ba836a..b87c3cfbc9 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -202,6 +202,9 @@
</action>
</release>
<release version="2.19.1" date="TBD" description="GA Release 2.19.1">
+ <action issue="LOG4J2-2297" dev="rgoers" type="fix">
+ Allow java.sql.Time objects to format properly in MapMessages.
+ </action>
<action issue="LOG4J2-2785" dev="rgoers" type="add" due-to="Markus Spann">
Pattern Layout to abbreviate the name of all logger components except the 2 rightmost.
</action>