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 00:01:22 UTC
[logging-log4j2] branch release-2.x updated: LOG4J2-2297 - Format java.sql.time correctly
This is an automated email from the ASF dual-hosted git repository.
rgoers 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 29804e2068 LOG4J2-2297 - Format java.sql.time correctly
29804e2068 is described below
commit 29804e2068e29739ef4fb009ba39cf1e0e3d4e95
Author: Ralph Goers <rg...@apache.org>
AuthorDate: Sun Jan 1 16:59:19 2023 -0700
LOG4J2-2297 - Format java.sql.time correctly
---
.../apache/logging/log4j/message/MapMessageTest.java | 18 ++++++++++++++----
.../logging/log4j/message/ParameterFormatter.java | 18 ++++++++++--------
.../org/apache/logging/log4j/util/StringBuilders.java | 2 ++
3 files changed, 26 insertions(+), 12 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 0df4685e4d..eb83c09be3 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,19 @@
*/
package org.apache.logging.log4j.message;
-import com.google.common.base.Strings;
-import org.apache.logging.log4j.util.StringBuilderFormattable;
-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.junit.jupiter.api.Test;
+
+import com.google.common.base.Strings;
+
import static org.junit.jupiter.api.Assertions.*;
/**
@@ -311,6 +313,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/org/apache/logging/log4j/message/ParameterFormatter.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterFormatter.java
index 1cc3b0c3a0..c0994ada32 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
@@ -16,9 +16,12 @@
*/
package org.apache.logging.log4j.message;
-import org.apache.logging.log4j.util.StringBuilders;
-
+import java.sql.Time;
import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
@@ -27,6 +30,8 @@ import java.util.IdentityHashMap;
import java.util.Map;
import java.util.Set;
+import org.apache.logging.log4j.util.StringBuilders;
+
/**
* Supports parameter formatting as used in ParameterizedMessage and ReusableParameterizedMessage.
*/
@@ -61,8 +66,7 @@ final class ParameterFormatter {
private static final char DELIM_STOP = '}';
private static final char ESCAPE_CHAR = '\\';
- private static final ThreadLocal<SimpleDateFormat> SIMPLE_DATE_FORMAT_REF =
- ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"));
+ private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
private ParameterFormatter() {
}
@@ -485,12 +489,10 @@ final class ParameterFormatter {
}
private static boolean appendDate(final Object o, final StringBuilder str) {
- if (!(o instanceof Date)) {
+ if (o instanceof Time || !(o instanceof Date)) {
return false;
}
- final Date date = (Date) o;
- final SimpleDateFormat format = SIMPLE_DATE_FORMAT_REF.get();
- str.append(format.format(date));
+ str.append(ZonedDateTime.ofInstant(((Date) o).toInstant(), ZoneId.systemDefault()).format(DATE_FORMATTER));
return true;
}
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 a45fa5ae93..3868850e85 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
@@ -97,6 +97,8 @@ public final class StringBuilders {
stringBuilder.append(((Float) obj).floatValue());
} else if (obj instanceof Byte) {
stringBuilder.append(((Byte) obj).byteValue());
+ } else if (obj instanceof java.sql.Time || obj instanceof java.time.temporal.Temporal) {
+ stringBuilder.append(obj);
} else {
return false;
}