INT-3712: Syslog: fix pattern according RFC 3164
JIRA: https://jira.spring.io/browse/INT-3712 Add `@author Karol Dowbecki` to affected classes
This commit is contained in:
committed by
Artem Bilan
parent
e5f03d4d4b
commit
8059566b9b
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2014 the original author or authors.
|
||||
* Copyright 2002-2015 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -26,6 +26,7 @@ import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
* Transforms a packet in Syslog (RFC3164) format to a Map.
|
||||
@@ -35,6 +36,7 @@ import org.springframework.util.Assert;
|
||||
*
|
||||
* @author Gary Russell
|
||||
* @author Artem Bilan
|
||||
* @author Karol Dowbecki
|
||||
* @since 2.2
|
||||
*
|
||||
*/
|
||||
@@ -54,7 +56,7 @@ public class SyslogToMapTransformer extends AbstractPayloadTransformer<Object, M
|
||||
|
||||
public static final String UNDECODED = "UNDECODED";
|
||||
|
||||
private final Pattern pattern = Pattern.compile("<([^>]+)>(.{15}) ([^ ]+) (?:([^:]+): )?(.*)", Pattern.DOTALL);
|
||||
private final Pattern pattern = Pattern.compile("<([^>]+)>(.{15}) ([^ ]+) ([a-zA-Z0-9]{0,32})(.*)", Pattern.DOTALL);
|
||||
|
||||
private final SimpleDateFormat dateFormat = new SimpleDateFormat("MMM dd HH:mm:ss");
|
||||
|
||||
@@ -126,7 +128,7 @@ public class SyslogToMapTransformer extends AbstractPayloadTransformer<Object, M
|
||||
map.put(TIMESTAMP, timestamp);
|
||||
}
|
||||
map.put(HOST, matcher.group(3));
|
||||
if (matcher.group(4) != null) {
|
||||
if (StringUtils.isNotEmpty(matcher.group(4))) {
|
||||
map.put(TAG, matcher.group(4));
|
||||
}
|
||||
map.put(MESSAGE, matcher.group(5));
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2012 the original author or authors.
|
||||
* Copyright 2012-2015 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -35,6 +35,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
/**
|
||||
* @author Gary Russell
|
||||
* @author Artem Bilan
|
||||
* @author Karol Dowbecki
|
||||
* @since 2.2
|
||||
*
|
||||
*/
|
||||
@@ -59,7 +60,8 @@ public class SyslogTransformerParserTests {
|
||||
Object date = map.get(SyslogToMapTransformer.TIMESTAMP);
|
||||
assertTrue(date instanceof Date || date instanceof String);
|
||||
assertEquals("WEBERN", map.get(SyslogToMapTransformer.HOST));
|
||||
assertEquals("TESTING[70729]", map.get(SyslogToMapTransformer.TAG));
|
||||
assertEquals("TEST SYSLOG MESSAGE", map.get(SyslogToMapTransformer.MESSAGE));
|
||||
assertEquals("TESTING", map.get(SyslogToMapTransformer.TAG));
|
||||
assertEquals("[70729]: TEST SYSLOG MESSAGE", map.get(SyslogToMapTransformer.MESSAGE));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2014 the original author or authors.
|
||||
* Copyright 2002-2015 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -27,69 +27,53 @@ import org.junit.Test;
|
||||
/**
|
||||
* @author Gary Russell
|
||||
* @author Artem Bilan
|
||||
* @author Karol Dowbecki
|
||||
* @since 2.2
|
||||
*
|
||||
*/
|
||||
public class SysLogTransformerTests {
|
||||
|
||||
private SyslogToMapTransformer sut = new SyslogToMapTransformer();
|
||||
|
||||
@Test
|
||||
public void testMap() throws Exception {
|
||||
SyslogToMapTransformer t = new SyslogToMapTransformer();
|
||||
Map<String, ?> transformed = t.transformPayload(
|
||||
"<158>JUL 26 22:08:35 WEBERN TESTING[70729]: TEST SYSLOG MESSAGE".getBytes());
|
||||
String syslog = "<158>JUL 26 22:08:35 WEBERN TESTING[70729]: TEST SYSLOG MESSAGE";
|
||||
Map<String, ?> transformed = sut.transformPayload(syslog.getBytes());
|
||||
assertEquals(6, transformed.size());
|
||||
assertEquals(19, transformed.get(SyslogToMapTransformer.FACILITY));
|
||||
assertEquals(6, transformed.get(SyslogToMapTransformer.SEVERITY));
|
||||
Object date = transformed.get(SyslogToMapTransformer.TIMESTAMP);
|
||||
assertTrue(date instanceof Date || date instanceof String);
|
||||
assertEquals("WEBERN", transformed.get(SyslogToMapTransformer.HOST));
|
||||
assertEquals("TESTING[70729]", transformed.get(SyslogToMapTransformer.TAG));
|
||||
assertEquals("TEST SYSLOG MESSAGE", transformed.get(SyslogToMapTransformer.MESSAGE));
|
||||
assertEquals("TESTING", transformed.get(SyslogToMapTransformer.TAG));
|
||||
assertEquals("[70729]: TEST SYSLOG MESSAGE", transformed.get(SyslogToMapTransformer.MESSAGE));
|
||||
|
||||
String[] fields = new String[] {SyslogToMapTransformer.FACILITY,
|
||||
SyslogToMapTransformer.SEVERITY, SyslogToMapTransformer.TIMESTAMP, SyslogToMapTransformer.HOST,
|
||||
String[] fields = {SyslogToMapTransformer.FACILITY, SyslogToMapTransformer.SEVERITY,
|
||||
SyslogToMapTransformer.TIMESTAMP, SyslogToMapTransformer.HOST,
|
||||
SyslogToMapTransformer.TAG, SyslogToMapTransformer.MESSAGE};
|
||||
Object[] values = new Object[] {19, 6, date, "WEBERN", "TESTING[70729]", "TEST SYSLOG MESSAGE"};
|
||||
// check iteration order
|
||||
int n = 0;
|
||||
for (Entry<String, ?> entry : transformed.entrySet()) {
|
||||
assertEquals(fields[n++], entry.getKey());
|
||||
}
|
||||
n = 0;
|
||||
for (String key : transformed.keySet()) {
|
||||
assertEquals(fields[n++], key);
|
||||
}
|
||||
n = 0;
|
||||
for (Object value : transformed.values()) {
|
||||
assertEquals(values[n++], value);
|
||||
}
|
||||
Object[] values = {19, 6, date, "WEBERN", "TESTING", "[70729]: TEST SYSLOG MESSAGE"};
|
||||
assertIterationOrder(fields, values, transformed);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBadPattern() throws Exception {
|
||||
SyslogToMapTransformer t = new SyslogToMapTransformer();
|
||||
String syslog = "&158>JUL 26 22:08:35 WEBERN TESTING[70729]: TEST SYSLOG MESSAGE";
|
||||
Map<String, ?> transformed = t.transformPayload(
|
||||
syslog.getBytes());
|
||||
Map<String, ?> transformed = sut.transformPayload(syslog.getBytes());
|
||||
assertEquals(1, transformed.size());
|
||||
assertEquals(syslog, transformed.get(SyslogToMapTransformer.UNDECODED));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBadFacilitySeverity() throws Exception {
|
||||
SyslogToMapTransformer t = new SyslogToMapTransformer();
|
||||
String syslog = "<X58>JUL 26 22:08:35 WEBERN TESTING[70729]: TEST SYSLOG MESSAGE";
|
||||
Map<String, ?> transformed = t.transformPayload(
|
||||
syslog.getBytes());
|
||||
Map<String, ?> transformed = sut.transformPayload(syslog.getBytes());
|
||||
assertEquals(1, transformed.size());
|
||||
assertEquals(syslog, transformed.get(SyslogToMapTransformer.UNDECODED));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWithoutTag() throws Exception {
|
||||
SyslogToMapTransformer t = new SyslogToMapTransformer();
|
||||
Map<String, ?> transformed = t.transformPayload(
|
||||
"<158>JUL 26 22:08:35 WEBERN TEST SYSLOG MESSAGE".getBytes());
|
||||
String syslog = "<158>JUL 26 22:08:35 WEBERN [70729]: TEST SYSLOG MESSAGE";
|
||||
Map<String, ?> transformed = sut.transformPayload(syslog.getBytes());
|
||||
assertEquals(5, transformed.size());
|
||||
assertEquals(19, transformed.get(SyslogToMapTransformer.FACILITY));
|
||||
assertEquals(6, transformed.get(SyslogToMapTransformer.SEVERITY));
|
||||
@@ -97,25 +81,48 @@ public class SysLogTransformerTests {
|
||||
assertTrue(date instanceof Date || date instanceof String);
|
||||
assertEquals("WEBERN", transformed.get(SyslogToMapTransformer.HOST));
|
||||
assertFalse(transformed.containsKey(SyslogToMapTransformer.TAG));
|
||||
assertEquals("TEST SYSLOG MESSAGE", transformed.get(SyslogToMapTransformer.MESSAGE));
|
||||
assertEquals("[70729]: TEST SYSLOG MESSAGE", transformed.get(SyslogToMapTransformer.MESSAGE));
|
||||
|
||||
String[] fields = new String[] {SyslogToMapTransformer.FACILITY,
|
||||
SyslogToMapTransformer.SEVERITY, SyslogToMapTransformer.TIMESTAMP, SyslogToMapTransformer.HOST,
|
||||
String[] fields = {SyslogToMapTransformer.FACILITY, SyslogToMapTransformer.SEVERITY,
|
||||
SyslogToMapTransformer.TIMESTAMP, SyslogToMapTransformer.HOST,
|
||||
SyslogToMapTransformer.MESSAGE};
|
||||
Object[] values = {19, 6, date, "WEBERN", "[70729]: TEST SYSLOG MESSAGE"};
|
||||
assertIterationOrder(fields, values, transformed);
|
||||
}
|
||||
|
||||
Object[] values = new Object[] {19, 6, date, "WEBERN", "TEST SYSLOG MESSAGE"};
|
||||
// check iteration order
|
||||
@Test
|
||||
public void testTagMaxLength() throws Exception {
|
||||
String syslog = "<158>JUL 26 22:08:35 WEBERN ABCDE1234567890ABCDE1234567890UVXYZ TEST SYSLOG MESSAGE";
|
||||
Map<String, ?> transformed = sut.transformPayload(syslog.getBytes());
|
||||
assertEquals(6, transformed.size());
|
||||
assertEquals(19, transformed.get(SyslogToMapTransformer.FACILITY));
|
||||
assertEquals(6, transformed.get(SyslogToMapTransformer.SEVERITY));
|
||||
Object date = transformed.get(SyslogToMapTransformer.TIMESTAMP);
|
||||
assertTrue(date instanceof Date || date instanceof String);
|
||||
assertEquals("WEBERN", transformed.get(SyslogToMapTransformer.HOST));
|
||||
assertEquals("ABCDE1234567890ABCDE1234567890UV", transformed.get(SyslogToMapTransformer.TAG));
|
||||
assertEquals("XYZ TEST SYSLOG MESSAGE", transformed.get(SyslogToMapTransformer.MESSAGE));
|
||||
|
||||
String[] fields = {SyslogToMapTransformer.FACILITY, SyslogToMapTransformer.SEVERITY,
|
||||
SyslogToMapTransformer.TIMESTAMP, SyslogToMapTransformer.HOST,
|
||||
SyslogToMapTransformer.TAG, SyslogToMapTransformer.MESSAGE};
|
||||
Object[] values = {19, 6, date, "WEBERN", "ABCDE1234567890ABCDE1234567890UV", "XYZ TEST SYSLOG MESSAGE"};
|
||||
assertIterationOrder(fields, values, transformed);
|
||||
}
|
||||
|
||||
private static void assertIterationOrder(String[] expectedFields, Object[] expectedValues,
|
||||
Map<String, ?> actualTransformed) {
|
||||
int n = 0;
|
||||
for (Entry<String, ?> entry : transformed.entrySet()) {
|
||||
assertEquals(fields[n++], entry.getKey());
|
||||
for (Entry<String, ?> entry : actualTransformed.entrySet()) {
|
||||
assertEquals(expectedFields[n++], entry.getKey());
|
||||
}
|
||||
n = 0;
|
||||
for (String key : transformed.keySet()) {
|
||||
assertEquals(fields[n++], key);
|
||||
for (String key : actualTransformed.keySet()) {
|
||||
assertEquals(expectedFields[n++], key);
|
||||
}
|
||||
n = 0;
|
||||
for (Object value : transformed.values()) {
|
||||
assertEquals(values[n++], value);
|
||||
for (Object value : actualTransformed.values()) {
|
||||
assertEquals(expectedValues[n++], value);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user