LOG4J2-1488 (GC) Fixed ISO8601 %date conversion pattern with a period '.' separator for milliseconds is now garbage free.
This closes #35 (https://github.com/apache/logging-log4j2/pull/35). Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/291fbf00 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/291fbf00 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/291fbf00 Branch: refs/heads/LOG4J-1181 Commit: 291fbf007962c48afb2c86d772a596c4d29a9cf8 Parents: 0a85a77 Author: rpopma <[email protected]> Authored: Sun Jul 31 15:53:54 2016 +0900 Committer: rpopma <[email protected]> Committed: Sun Jul 31 15:53:54 2016 +0900 ---------------------------------------------------------------------- .../log4j/core/util/datetime/FixedDateFormat.java | 7 ++++++- .../log4j/core/pattern/DatePatternConverterTest.java | 11 +++++++++++ log4j-core/src/test/resources/gcFreeLogging.xml | 4 ++-- .../src/test/resources/gcFreeMixedSyncAsyncLogging.xml | 4 ++-- src/changes/changes.xml | 3 +++ 5 files changed, 24 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/291fbf00/log4j-core/src/main/java/org/apache/logging/log4j/core/util/datetime/FixedDateFormat.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/datetime/FixedDateFormat.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/datetime/FixedDateFormat.java index 3b1f102..7232b14 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/datetime/FixedDateFormat.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/datetime/FixedDateFormat.java @@ -78,7 +78,12 @@ public class FixedDateFormat { /** * ISO8601 time format: {@code "yyyy-MM-dd'T'HH:mm:ss,SSS"}. */ - ISO8601("yyyy-MM-dd'T'HH:mm:ss,SSS", "yyyy-MM-dd'T'", 2, ':', 1, ',', 1); + ISO8601("yyyy-MM-dd'T'HH:mm:ss,SSS", "yyyy-MM-dd'T'", 2, ':', 1, ',', 1), + + /** + * ISO8601 time format: {@code "yyyy-MM-dd'T'HH:mm:ss.SSS"}. + */ + ISO8601_PERIOD("yyyy-MM-dd'T'HH:mm:ss.SSS", "yyyy-MM-dd'T'", 2, ':', 1, '.', 1); private final String pattern; private final String datePattern; http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/291fbf00/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterTest.java ---------------------------------------------------------------------- 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 4a5669c..5dc6084 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 @@ -191,6 +191,17 @@ public class DatePatternConverterTest { } @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()); + } + + @Test public void testFormatDateStringBuilderOriginalPattern() { final String[] pattern = {"yyyy/MM/dd HH-mm-ss.SSS"}; final DatePatternConverter converter = DatePatternConverter.newInstance(pattern); http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/291fbf00/log4j-core/src/test/resources/gcFreeLogging.xml ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/resources/gcFreeLogging.xml b/log4j-core/src/test/resources/gcFreeLogging.xml index 97fc345..d4b597f 100644 --- a/log4j-core/src/test/resources/gcFreeLogging.xml +++ b/log4j-core/src/test/resources/gcFreeLogging.xml @@ -12,7 +12,7 @@ <RollingFile name="RollingFile" fileName="target/gcfreeRollingFile.log" filePattern="target/gcfree-%d{MM-dd-yy-HH-mm-ss}.log.gz"> <PatternLayout> - <Pattern>%d{DEFAULT}{UTC} %p %c{1.} [%t] %m%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %m%n}</Pattern> + <Pattern>%d{yyyy-MM-dd'T'HH:mm:ss,SSS}{UTC} %p %c{1.} [%t] %m%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %m%n}</Pattern> </PatternLayout> <Policies> <SizeBasedTriggeringPolicy size="50M" /> @@ -20,7 +20,7 @@ </RollingFile> <RandomAccessFile name="RandomAccessFile" fileName="target/gcfreeRAF.log" immediateFlush="false" append="false"> <PatternLayout> - <Pattern>%d{DEFAULT}{UTC} %p %c{1.} [%t] %X{aKey} %m %ex%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %X{aKey} %m %ex%n}</Pattern> + <Pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSS}{UTC} %p %c{1.} [%t] %X{aKey} %m %ex%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %X{aKey} %m %ex%n}</Pattern> </PatternLayout> </RandomAccessFile> <RollingRandomAccessFile name="RollingRandomAccessFile" http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/291fbf00/log4j-core/src/test/resources/gcFreeMixedSyncAsyncLogging.xml ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/resources/gcFreeMixedSyncAsyncLogging.xml b/log4j-core/src/test/resources/gcFreeMixedSyncAsyncLogging.xml index 6944e36..f1937be 100644 --- a/log4j-core/src/test/resources/gcFreeMixedSyncAsyncLogging.xml +++ b/log4j-core/src/test/resources/gcFreeMixedSyncAsyncLogging.xml @@ -6,13 +6,13 @@ </Console> <File name="File" fileName="target/gcfreefileMixed.log" bufferedIO="false"> <PatternLayout> - <Pattern>%d{DEFAULT}{UTC} %p %c{1.} [%t] %m%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %m%n}</Pattern> + <Pattern>%d{yyyy-MM-dd'T'HH:mm:ss,SSS}{UTC} %p %c{1.} [%t] %m%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %m%n}</Pattern> </PatternLayout> </File> <RollingFile name="RollingFile" fileName="target/gcfreeRollingFileMixed.log" filePattern="target/gcfree-%d{MM-dd-yy-HH-mm-ss}.log.gz"> <PatternLayout> - <Pattern>%d{DEFAULT}{UTC} %p %c{1.} [%t] %m%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %m%n}</Pattern> + <Pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSS}{UTC} %p %c{1.} [%t] %m%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %m%n}</Pattern> </PatternLayout> <Policies> <SizeBasedTriggeringPolicy size="50M" /> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/291fbf00/src/changes/changes.xml ---------------------------------------------------------------------- diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 7e44b1b..efd8e52 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -24,6 +24,9 @@ </properties> <body> <release version="2.7" date="2016-MM-DD" description="GA Release 2.7"> + <action issue="LOG4J2-1488" dev="rpopma" type="fix" due-to="Richard Zschech"> + (GC) Fixed ISO8601 %date conversion pattern with a period '.' separator for milliseconds is now garbage free. + </action> <action issue="LOG4J2-1489" dev="rpopma" type="fix" due-to="Richard Zschech"> (GC) Fixed %date conversion patterns with a timezone parameter are now garbage free. </action>
