You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by vy...@apache.org on 2021/08/04 06:10:04 UTC
[logging-log4j2] 01/02: LOG4J2-2885: Added support for US-style
date patterns and micro/nano seconds (#548)
This is an automated email from the ASF dual-hosted git repository.
vy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit a6b89a200b36d2ef62d8a66610e7cb66780d7111
Author: Markus Spann <ma...@hotmail.com>
AuthorDate: Wed Aug 4 08:01:39 2021 +0200
LOG4J2-2885: Added support for US-style date patterns and micro/nano seconds (#548)
Co-authored-by: Markus Spann <sm...@outlook.de>
---
.../core/time/internal/format/FixedDateFormat.java | 16 +++++--
.../core/pattern/DatePatternConverterTest.java | 52 ++++++++++------------
2 files changed, 37 insertions(+), 31 deletions(-)
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/format/FixedDateFormat.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/format/FixedDateFormat.java
index 77c015f..d4da20f 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/format/FixedDateFormat.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/format/FixedDateFormat.java
@@ -76,6 +76,16 @@ public class FixedDateFormat {
DATE_PERIOD("dd MMM yyyy HH:mm:ss.SSS", "dd MMM yyyy ", 0, ':', 1, '.', 1, 3, null),
/**
+ * American date/time format with 2-digit year: {@code "dd/MM/yy HH:mm:ss.SSS"}.
+ */
+ US_MONTH_DAY_YEAR2_TIME("dd/MM/yy HH:mm:ss.SSS", "dd/MM/yy ", 0, ':', 1, '.', 1, 3, null),
+
+ /**
+ * American date/time format with 4-digit year: {@code "dd/MM/yyyy HH:mm:ss.SSS"}.
+ */
+ US_MONTH_DAY_YEAR4_TIME("dd/MM/yyyy HH:mm:ss.SSS", "dd/MM/yyyy ", 0, ':', 1, '.', 1, 3, null),
+
+ /**
* DEFAULT time format: {@code "yyyy-MM-dd HH:mm:ss,SSS"}.
*/
DEFAULT("yyyy-MM-dd HH:mm:ss,SSS", "yyyy-MM-dd ", 0, ':', 1, ',', 1, 3, null),
@@ -461,13 +471,13 @@ public class FixedDateFormat {
}
final String option0 = options[0];
- final FixedFormat withNanos = FixedFormat.lookupIgnoringNanos(option0);
- if (withNanos != null) {
+ final FixedFormat withoutNanos = FixedFormat.lookupIgnoringNanos(option0);
+ if (withoutNanos != null) {
final int[] nanoRange = FixedFormat.nanoRange(option0);
final int nanoStart = nanoRange[0];
final int nanoEnd = nanoRange[1];
final int secondFractionDigits = nanoEnd - nanoStart;
- return new FixedDateFormat(withNanos, tz, secondFractionDigits);
+ return new FixedDateFormat(withoutNanos, tz, secondFractionDigits);
}
final FixedFormat type = FixedFormat.lookup(option0);
return type == null ? null : new FixedDateFormat(type, tz);
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterTest.java
index a9362e3..3310929 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterTest.java
@@ -105,7 +105,7 @@ public class DatePatternConverterTest {
field.setBoolean(null, threadLocalEnabled.booleanValue());
}
- private Date date(final int year, final int month, final int date) {
+ private static Date date(final int year, final int month, final int date) {
final Calendar cal = Calendar.getInstance();
cal.set(year, month, date, 14, 15, 16);
cal.set(Calendar.MILLISECOND, 123);
@@ -122,12 +122,7 @@ public class DatePatternConverterTest {
@Test
public void testFormatDateStringBuilderDefaultPattern() {
- final DatePatternConverter converter = DatePatternConverter.newInstance(null);
- final StringBuilder sb = new StringBuilder();
- converter.format(date(2001, 1, 1), sb);
-
- final String expected = "2001-02-01 14:15:16,123";
- assertEquals(expected, sb.toString());
+ assertDatePattern(null, date(2001, 1, 1), "2001-02-01 14:15:16,123");
}
@Test
@@ -142,24 +137,12 @@ public class DatePatternConverterTest {
@Test
public void testFormatDateStringBuilderIso8601BasicWithPeriod() {
- final String[] pattern = {FixedDateFormat.FixedFormat.ISO8601_BASIC_PERIOD.name()};
- final DatePatternConverter converter = DatePatternConverter.newInstance(pattern);
- final StringBuilder sb = new StringBuilder();
- converter.format(date(2001, 1, 1), sb);
-
- final String expected = "20010201T141516.123";
- assertEquals(expected, sb.toString());
+ assertDatePattern(FixedDateFormat.FixedFormat.ISO8601_BASIC_PERIOD.name(), date(2001, 1, 1), "20010201T141516.123");
}
@Test
public void testFormatDateStringBuilderIso8601WithPeriod() {
- final String[] pattern = {FixedDateFormat.FixedFormat.ISO8601_PERIOD.name()};
- final DatePatternConverter converter = DatePatternConverter.newInstance(pattern);
- final StringBuilder sb = new StringBuilder();
- converter.format(date(2001, 1, 1), sb);
-
- final String expected = "2001-02-01T14:15:16.123";
- assertEquals(expected, sb.toString());
+ assertDatePattern(FixedDateFormat.FixedFormat.ISO8601_PERIOD.name(), date(2001, 1, 1), "2001-02-01T14:15:16.123");
}
@Test
@@ -180,13 +163,7 @@ public class DatePatternConverterTest {
@Test
public void testFormatDateStringBuilderOriginalPattern() {
- final String[] pattern = {"yyyy/MM/dd HH-mm-ss.SSS"};
- final DatePatternConverter converter = DatePatternConverter.newInstance(pattern);
- final StringBuilder sb = new StringBuilder();
- converter.format(date(2001, 1, 1), sb);
-
- final String expected = "2001/02/01 14-15-16.123";
- assertEquals(expected, sb.toString());
+ assertDatePattern("yyyy/MM/dd HH-mm-ss.SSS", date(2001, 1, 1), "2001/02/01 14-15-16.123");
}
@Test
@@ -212,6 +189,25 @@ public class DatePatternConverterTest {
}
@Test
+ public void testFormatAmericanPatterns() {
+ Date date = date(2011, 2, 11);
+ assertDatePattern("US_MONTH_DAY_YEAR4_TIME", date, "11/03/2011 14:15:16.123");
+ assertDatePattern("US_MONTH_DAY_YEAR2_TIME", date, "11/03/11 14:15:16.123");
+ assertDatePattern("dd/MM/yyyy HH:mm:ss.SSS", date, "11/03/2011 14:15:16.123");
+ assertDatePattern("dd/MM/yyyy HH:mm:ss.nnnnnn", date, "11/03/2011 14:15:16.123000");
+ assertDatePattern("dd/MM/yy HH:mm:ss.SSS", date, "11/03/11 14:15:16.123");
+ assertDatePattern("dd/MM/yy HH:mm:ss.nnnnnn", date, "11/03/11 14:15:16.123000");
+ }
+
+ private static void assertDatePattern(final String format, final Date date, final String expected) {
+ DatePatternConverter converter = DatePatternConverter.newInstance(new String[] {format});
+ StringBuilder sb = new StringBuilder();
+ converter.format(date, sb);
+
+ assertEquals(expected, sb.toString());
+ }
+
+ @Test
public void testFormatLogEventStringBuilderIso8601TimezoneJST() {
final LogEvent event = new MyLogEvent();
final String[] optionsWithTimezone = {ISO8601, "JST"};