Repository: flume Updated Branches: refs/heads/trunk 76ddc82fb -> 534fe268d
FLUME-2497. Support fractional seconds in Syslog timestamps This fixes a bug in the SyslogTcpSource and SyslogUdpSource where fractional timestamps fail to parse. (Johny Rufus via Mike Percy) Project: http://git-wip-us.apache.org/repos/asf/flume/repo Commit: http://git-wip-us.apache.org/repos/asf/flume/commit/534fe268 Tree: http://git-wip-us.apache.org/repos/asf/flume/tree/534fe268 Diff: http://git-wip-us.apache.org/repos/asf/flume/diff/534fe268 Branch: refs/heads/trunk Commit: 534fe268d1d0ad197f6e4a867ab0ae0155d1a927 Parents: 76ddc82 Author: Mike Percy <[email protected]> Authored: Mon Nov 10 18:57:20 2014 -0800 Committer: Mike Percy <[email protected]> Committed: Mon Nov 10 18:57:20 2014 -0800 ---------------------------------------------------------------------- .../java/org/apache/flume/source/SyslogUtils.java | 3 +++ .../org/apache/flume/source/TestSyslogUtils.java | 15 +++++++++++++++ 2 files changed, 18 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flume/blob/534fe268/flume-ng-core/src/main/java/org/apache/flume/source/SyslogUtils.java ---------------------------------------------------------------------- diff --git a/flume-ng-core/src/main/java/org/apache/flume/source/SyslogUtils.java b/flume-ng-core/src/main/java/org/apache/flume/source/SyslogUtils.java index 50593a7..42e3f71 100644 --- a/flume-ng-core/src/main/java/org/apache/flume/source/SyslogUtils.java +++ b/flume-ng-core/src/main/java/org/apache/flume/source/SyslogUtils.java @@ -241,6 +241,9 @@ public class SyslogUtils { // timezone in RFC5424 is [+-]tt:tt, so remove the ':' for java date formatting fmt1.searchPattern.add("([+-])(\\d{2})[:](\\d{2})"); fmt1.replacePattern.add("$1$2$3"); + // FLUME-2497: SimpleDateFormat does not handle microseconds, Truncate after 3 digits. + fmt1.searchPattern.add("(T\\d{2}:\\d{2}:\\d{2}\\.\\d{3})(\\d*)"); + fmt1.replacePattern.add("$1"); fmt1.dateFormat.add(new SimpleDateFormat(SYSLOG_TIMESTAMP_FORMAT_RFC5424_1, Locale.ENGLISH)); fmt1.dateFormat.add(new SimpleDateFormat(SYSLOG_TIMESTAMP_FORMAT_RFC5424_2, Locale.ENGLISH)); fmt1.dateFormat.add(new SimpleDateFormat(SYSLOG_TIMESTAMP_FORMAT_RFC5424_3, Locale.ENGLISH)); http://git-wip-us.apache.org/repos/asf/flume/blob/534fe268/flume-ng-core/src/test/java/org/apache/flume/source/TestSyslogUtils.java ---------------------------------------------------------------------- diff --git a/flume-ng-core/src/test/java/org/apache/flume/source/TestSyslogUtils.java b/flume-ng-core/src/test/java/org/apache/flume/source/TestSyslogUtils.java index 86ef40f..6da1733 100644 --- a/flume-ng-core/src/test/java/org/apache/flume/source/TestSyslogUtils.java +++ b/flume-ng-core/src/test/java/org/apache/flume/source/TestSyslogUtils.java @@ -153,6 +153,21 @@ public class TestSyslogUtils { } @Test + public void TestHeader11() throws ParseException { + // SyslogUtils should truncate microsecond precision to only 3 digits. + // This is to maintain consistency between the two syslog implementations. + String inputStamp = "2014-10-03T17:20:01.123456-07:00"; + String outputStamp = "2014-10-03T17:20:01.123-07:00"; + + String format1 = "yyyy-MM-dd'T'HH:mm:ss.S"; + String host1 = "ubuntu-11.cloudera.com"; + String data1 = "some msg"; + + String msg1 = "<10>" + inputStamp + " " + host1 + " " + data1 + "\n"; + checkHeader(msg1, outputStamp, format1, host1, data1); + } + + @Test public void TestRfc3164HeaderApacheLogWithNulls() throws ParseException { String stamp1 = "Apr 1 13:14:04"; String format1 = "yyyyMMM d HH:mm:ss";
