Skip to content

Commit 025b4bd

Browse files
authored
Port date & time formatter rewrite to main (#3150)
1 parent fbe19ac commit 025b4bd

File tree

48 files changed

+2714
-6143
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+2714
-6143
lines changed

log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ private static void writer(
265265
private void verifyFile(final int count) throws Exception {
266266
// String expected = "[\\w]* \\[\\s*\\] INFO TestLogger - Test$";
267267
final String expected =
268-
"^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2},\\d{3} \\[[^\\]]*\\] INFO TestLogger - Test";
268+
"^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}.\\d{3} \\[[^\\]]*\\] INFO TestLogger - Test";
269269
final Pattern pattern = Pattern.compile(expected);
270270
int lines = 0;
271271
try (final BufferedReader is = new BufferedReader(new InputStreamReader(new FileInputStream(FILE_NAME)))) {

log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java

+7-3
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@
3535
import org.apache.logging.log4j.core.config.Configuration;
3636
import org.apache.logging.log4j.core.config.DefaultConfiguration;
3737
import org.apache.logging.log4j.core.layout.PatternLayout;
38-
import org.apache.logging.log4j.core.time.internal.format.FastDateFormat;
38+
import org.apache.logging.log4j.core.time.MutableInstant;
39+
import org.apache.logging.log4j.core.util.internal.instant.InstantPatternFormatter;
3940
import org.junit.jupiter.api.Test;
4041
import org.junit.jupiter.api.io.TempDir;
4142

@@ -46,7 +47,8 @@ public class OnStartupTriggeringPolicyTest {
4647

4748
private static final String TARGET_PATTERN = "/test1-%d{MM-dd-yyyy}-%i.log";
4849
private static final String TEST_DATA = "Hello world!";
49-
private static final FastDateFormat formatter = FastDateFormat.getInstance("MM-dd-yyyy");
50+
private static final InstantPatternFormatter formatter =
51+
InstantPatternFormatter.newBuilder().setPattern("MM-dd-yyyy").build();
5052

5153
@TempDir
5254
Path tempDir;
@@ -56,7 +58,9 @@ public void testPolicy() throws Exception {
5658
final Configuration configuration = new DefaultConfiguration();
5759
final Path target = tempDir.resolve("testfile");
5860
final long timeStamp = Instant.now().minus(Duration.ofDays(1)).toEpochMilli();
59-
final String expectedDate = formatter.format(timeStamp);
61+
final MutableInstant instant = new MutableInstant();
62+
instant.initFromEpochMilli(timeStamp, 0);
63+
final String expectedDate = formatter.format(instant);
6064
final Path rolled = tempDir.resolve("test1-" + expectedDate + "-1.log");
6165
final long copied;
6266
try (final InputStream is = new ByteArrayInputStream(TEST_DATA.getBytes(StandardCharsets.UTF_8))) {

log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteAccumulatedCount1Test.java

+1-5
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,6 @@
3535
import org.apache.logging.log4j.Logger;
3636
import org.apache.logging.log4j.core.LoggerContext;
3737
import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
38-
import org.apache.logging.log4j.core.time.internal.format.FixedDateFormat;
39-
import org.apache.logging.log4j.core.time.internal.format.FixedDateFormat.FixedFormat;
4038
import org.apache.logging.log4j.test.junit.CleanUpDirectories;
4139
import org.junit.jupiter.api.Tag;
4240
import org.junit.jupiter.api.Test;
@@ -76,9 +74,7 @@ public void testAppender(final LoggerContext context) throws Exception {
7674
assertTrue(files.length > 0, "Dir " + DIR + " should contain files");
7775
for (final File file : files) {
7876
final BasicFileAttributes fileAttributes = Files.readAttributes(file.toPath(), BasicFileAttributes.class);
79-
System.out.println(file + " (" + fileAttributes.size() + "B) "
80-
+ FixedDateFormat.create(FixedFormat.ABSOLUTE)
81-
.format(fileAttributes.lastModifiedTime().toMillis()));
77+
System.out.println(file + " (" + fileAttributes.size() + "B) " + fileAttributes.lastModifiedTime());
8278
}
8379
final List<String> expected = List.of("my-1.log", "my-2.log", "my-3.log", "my-4.log", "my-5.log");
8480
assertEquals(expected.size() + 6, files.length, Arrays.toString(files));

log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteAccumulatedCount2Test.java

+1-5
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,6 @@
3535
import org.apache.logging.log4j.Logger;
3636
import org.apache.logging.log4j.core.LoggerContext;
3737
import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
38-
import org.apache.logging.log4j.core.time.internal.format.FixedDateFormat;
39-
import org.apache.logging.log4j.core.time.internal.format.FixedDateFormat.FixedFormat;
4038
import org.apache.logging.log4j.test.junit.CleanUpDirectories;
4139
import org.junit.jupiter.api.Tag;
4240
import org.junit.jupiter.api.Test;
@@ -77,9 +75,7 @@ public void testAppender(final LoggerContext context) throws Exception {
7775
assertTrue(files.length > 0, "Dir " + DIR + " should contain files");
7876
for (final File file : files) {
7977
final BasicFileAttributes fileAttributes = Files.readAttributes(file.toPath(), BasicFileAttributes.class);
80-
System.out.println(file + " (" + fileAttributes.size() + "B) "
81-
+ FixedDateFormat.create(FixedFormat.ABSOLUTE)
82-
.format(fileAttributes.lastModifiedTime().toMillis()));
78+
System.out.println(file + " (" + fileAttributes.size() + "B) " + fileAttributes.lastModifiedTime());
8379
}
8480
// sometimes "test-9.log", sometimes "test-10.log" remains
8581
final List<String> expected = List.of("my-1.log", "my-2.log", "my-3.log", "my-4.log", "my-5.log");

log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteAccumulatedSizeTest.java

+1-5
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@
2727
import org.apache.logging.log4j.Logger;
2828
import org.apache.logging.log4j.core.LoggerContext;
2929
import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
30-
import org.apache.logging.log4j.core.time.internal.format.FixedDateFormat;
31-
import org.apache.logging.log4j.core.time.internal.format.FixedDateFormat.FixedFormat;
3230
import org.apache.logging.log4j.test.junit.CleanUpDirectories;
3331
import org.junit.jupiter.api.Tag;
3432
import org.junit.jupiter.api.Test;
@@ -61,9 +59,7 @@ public void testAppender(final LoggerContext context) throws Exception {
6159
assertTrue(files.length > 0, "Dir " + DIR + " should contain files");
6260
for (final File file : files) {
6361
final BasicFileAttributes fileAttributes = Files.readAttributes(file.toPath(), BasicFileAttributes.class);
64-
System.out.println(file + " (" + fileAttributes.size() + "B) "
65-
+ FixedDateFormat.create(FixedFormat.ABSOLUTE)
66-
.format(fileAttributes.lastModifiedTime().toMillis()));
62+
System.out.println(file + " (" + fileAttributes.size() + "B) " + fileAttributes.lastModifiedTime());
6763
}
6864
assertEquals(4, files.length, Arrays.toString(files));
6965
long total = 0;

log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteNestedTest.java

+1-5
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,6 @@
3535
import org.apache.logging.log4j.Logger;
3636
import org.apache.logging.log4j.core.LoggerContext;
3737
import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
38-
import org.apache.logging.log4j.core.time.internal.format.FixedDateFormat;
39-
import org.apache.logging.log4j.core.time.internal.format.FixedDateFormat.FixedFormat;
4038
import org.apache.logging.log4j.test.junit.CleanUpDirectories;
4139
import org.junit.jupiter.api.Tag;
4240
import org.junit.jupiter.api.Test;
@@ -76,9 +74,7 @@ public void testAppender(final LoggerContext context) throws Exception {
7674
assertTrue(files.length > 0, "Dir " + DIR + " should contain files");
7775
for (final File file : files) {
7876
final BasicFileAttributes fileAttributes = Files.readAttributes(file.toPath(), BasicFileAttributes.class);
79-
System.out.println(file + " (" + fileAttributes.size() + "B) "
80-
+ FixedDateFormat.create(FixedFormat.ABSOLUTE)
81-
.format(fileAttributes.lastModifiedTime().toMillis()));
77+
System.out.println(file + " (" + fileAttributes.size() + "B) " + fileAttributes.lastModifiedTime());
8278
}
8379

8480
final List<String> expected = Arrays.asList("my-1.log", "my-2.log", "my-3.log", "my-4.log", "my-5.log");

log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/plugins/LegacyPluginTest.java

-55
This file was deleted.

log4j-core-test/src/test/java/org/apache/logging/log4j/core/layout/HtmlLayoutTest.java

-69
Original file line numberDiff line numberDiff line change
@@ -16,26 +16,19 @@
1616
*/
1717
package org.apache.logging.log4j.core.layout;
1818

19-
import static org.apache.logging.log4j.core.time.internal.format.FixedDateFormat.FixedFormat;
2019
import static org.junit.jupiter.api.Assertions.assertEquals;
2120
import static org.junit.jupiter.api.Assertions.assertFalse;
2221
import static org.junit.jupiter.api.Assertions.assertTrue;
2322

2423
import java.lang.management.ManagementFactory;
2524
import java.nio.charset.StandardCharsets;
26-
import java.text.MessageFormat;
27-
import java.time.ZoneId;
28-
import java.time.ZonedDateTime;
29-
import java.time.format.DateTimeFormatter;
3025
import java.util.Calendar;
3126
import java.util.List;
32-
import java.util.Locale;
3327
import java.util.Map;
3428
import org.apache.logging.log4j.Level;
3529
import org.apache.logging.log4j.ThreadContext;
3630
import org.apache.logging.log4j.core.AbstractLogEvent;
3731
import org.apache.logging.log4j.core.Appender;
38-
import org.apache.logging.log4j.core.LogEvent;
3932
import org.apache.logging.log4j.core.Logger;
4033
import org.apache.logging.log4j.core.LoggerContext;
4134
import org.apache.logging.log4j.core.config.Configuration;
@@ -45,7 +38,6 @@
4538
import org.apache.logging.log4j.core.test.junit.ConfigurationFactoryType;
4639
import org.apache.logging.log4j.core.time.Instant;
4740
import org.apache.logging.log4j.core.time.MutableInstant;
48-
import org.apache.logging.log4j.core.time.internal.format.FixedDateFormat;
4941
import org.apache.logging.log4j.message.Message;
5042
import org.apache.logging.log4j.message.SimpleMessage;
5143
import org.apache.logging.log4j.test.junit.UsingAnyThreadContext;
@@ -243,68 +235,7 @@ public void testLayoutWithDatePatternUnixMillis() {
243235
assertEquals("<td>" + event.getTimeMillis() + "</td>", actual, "Incorrect date:" + actual);
244236
}
245237

246-
@Test
247-
public void testLayoutWithDatePatternFixedFormat() {
248-
for (final String timeZone : new String[] {"GMT+8", "GMT+0530", "UTC", null}) {
249-
for (final FixedDateFormat.FixedFormat format : FixedDateFormat.FixedFormat.values()) {
250-
testLayoutWithDatePatternFixedFormat(format, timeZone);
251-
}
252-
}
253-
}
254-
255238
private String getDateLine(final String logEventString) {
256239
return logEventString.split(System.lineSeparator())[2];
257240
}
258-
259-
private void testLayoutWithDatePatternFixedFormat(final FixedFormat format, final String timezone) {
260-
final HtmlLayout layout = HtmlLayout.newBuilder()
261-
.setConfiguration(new DefaultConfiguration())
262-
.setDatePattern(format.name())
263-
.setTimezone(timezone)
264-
.build();
265-
266-
final LogEvent event = new MyLogEvent();
267-
final String actual = getDateLine(layout.toSerializable(event));
268-
269-
// build expected date string
270-
final java.time.Instant instant = java.time.Instant.ofEpochSecond(
271-
event.getInstant().getEpochSecond(), event.getInstant().getNanoOfSecond());
272-
ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(instant, ZoneId.systemDefault());
273-
if (timezone != null) {
274-
zonedDateTime = zonedDateTime.withZoneSameInstant(ZoneId.of(timezone));
275-
}
276-
277-
// LOG4J2-3019 HtmlLayoutTest.testLayoutWithDatePatternFixedFormat test fails on windows
278-
// https://issues.apache.org/jira/browse/LOG4J2-3019
279-
// java.time.format.DateTimeFormatterBuilder.toFormatter() defaults to using
280-
// Locale.getDefault(Locale.Category.FORMAT)
281-
final Locale formatLocale = Locale.getDefault(Locale.Category.FORMAT);
282-
final Locale locale = Locale.getDefault().equals(formatLocale) ? formatLocale : Locale.getDefault();
283-
284-
// For DateTimeFormatter of jdk,
285-
// Pattern letter 'S' means fraction-of-second, 'n' means nano-of-second. Log4j2 needs S.
286-
// Pattern letter 'X' (upper case) will output 'Z' when the offset to be output would be zero,
287-
// whereas pattern letter 'x' (lower case) will output '+00', '+0000', or '+00:00'. Log4j2 needs x.
288-
final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(
289-
format.getPattern().replace('n', 'S').replace('X', 'x'), locale);
290-
String expected = zonedDateTime.format(dateTimeFormatter);
291-
292-
final String offset = zonedDateTime.getOffset().toString();
293-
294-
// Truncate minutes if timeZone format is HH and timeZone has minutes. This is required because according to
295-
// DateTimeFormatter,
296-
// One letter outputs just the hour, such as '+01', unless the minute is non-zero in which case the minute is
297-
// also output, such as '+0130'
298-
// ref : https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html
299-
if (FixedDateFormat.FixedTimeZoneFormat.HH.equals(format.getTimeZoneFormat())
300-
&& offset.contains(":")
301-
&& !"00".equals(offset.split(":")[1])) {
302-
expected = expected.substring(0, expected.length() - 2);
303-
}
304-
305-
assertEquals(
306-
"<td>" + expected + "</td>",
307-
actual,
308-
MessageFormat.format("Incorrect date={0}, format={1}, timezone={2}", actual, format.name(), timezone));
309-
}
310241
}

0 commit comments

Comments
 (0)