Skip to content

Commit b4a32aa

Browse files
committed
Properly recognize ISO-8601 dates in Syslog events
Closes #16
1 parent 6a7e4e2 commit b4a32aa

File tree

2 files changed

+28
-2
lines changed

2 files changed

+28
-2
lines changed

src/main/java/org/graylog2/syslog4j/server/impl/event/SyslogServerEvent.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import org.graylog2.syslog4j.SyslogConstants;
44
import org.graylog2.syslog4j.server.SyslogServerEventIF;
55
import org.graylog2.syslog4j.util.SyslogUtility;
6+
import org.joda.time.DateTime;
67

78
import java.net.InetAddress;
89
import java.text.DateFormat;
@@ -80,6 +81,7 @@ protected void parseHost() {
8081
protected void parseDate() {
8182
int datelength = 16;
8283
String dateFormatS = DATE_FORMAT;
84+
boolean isDate8601 = false;
8385

8486
if (this.message.length() > datelength) {
8587

@@ -89,12 +91,22 @@ protected void parseDate() {
8991
dateFormatS = DATE_FORMAT_S;
9092
}
9193

94+
if (Character.isDigit(this.message.charAt(0))) {
95+
datelength = this.message.indexOf(' ') + 1;
96+
isDate8601 = true;
97+
}
98+
9299
String year = Integer.toString(Calendar.getInstance().get(Calendar.YEAR));
100+
String originalDate = this.message.substring(0, datelength - 1);
101+
String modifiedDate = originalDate + " " + year;
93102

94-
String originalDate = this.message.substring(0, datelength - 1) + " " + year;
95103
DateFormat dateFormat = new SimpleDateFormat(dateFormatS, Locale.ENGLISH);
96104
try {
97-
this.date = dateFormat.parse(originalDate);
105+
if (!isDate8601) {
106+
this.date = dateFormat.parse(modifiedDate);
107+
} else {
108+
this.date = DateTime.parse(originalDate).toDate();
109+
}
98110

99111
this.message = this.message.substring(datelength);
100112

src/test/java/org/graylog2/syslog4j/server/impl/event/SyslogServerEventTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.graylog2.syslog4j.server.impl.event;
22

33
import org.joda.time.DateTime;
4+
import org.joda.time.DateTimeZone;
45
import org.junit.Test;
56

67
import java.net.InetAddress;
@@ -165,4 +166,17 @@ public void testFacility15() throws Exception {
165166
assertEquals("mymachine su[123]: 'su root' failed for lonvick on /dev/pts/8", event.getMessage());
166167
}
167168

169+
@Test
170+
public void testIssue16() throws Exception {
171+
// Message from: https://github.com/Graylog2/syslog4j-graylog2/issues/16
172+
final String message = "<6>2016-10-12T14:10:18Z hostname testmsg[20]: Test";
173+
174+
final SyslogServerEvent event = buildEvent(message);
175+
176+
assertEquals(new DateTime(2016, 10, 12, 14, 10, 18, DateTimeZone.UTC).toDate(), event.getDate());
177+
assertEquals(0, event.getFacility());
178+
assertEquals("hostname", event.getHost());
179+
assertEquals(6, event.getLevel());
180+
assertEquals("hostname testmsg[20]: Test", event.getMessage());
181+
}
168182
}

0 commit comments

Comments
 (0)