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");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with 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 java.util.regex.Pattern;
|
||||||
|
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Transforms a packet in Syslog (RFC3164) format to a Map.
|
* Transforms a packet in Syslog (RFC3164) format to a Map.
|
||||||
@@ -35,6 +36,7 @@ import org.springframework.util.Assert;
|
|||||||
*
|
*
|
||||||
* @author Gary Russell
|
* @author Gary Russell
|
||||||
* @author Artem Bilan
|
* @author Artem Bilan
|
||||||
|
* @author Karol Dowbecki
|
||||||
* @since 2.2
|
* @since 2.2
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@@ -54,7 +56,7 @@ public class SyslogToMapTransformer extends AbstractPayloadTransformer<Object, M
|
|||||||
|
|
||||||
public static final String UNDECODED = "UNDECODED";
|
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");
|
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(TIMESTAMP, timestamp);
|
||||||
}
|
}
|
||||||
map.put(HOST, matcher.group(3));
|
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(TAG, matcher.group(4));
|
||||||
}
|
}
|
||||||
map.put(MESSAGE, matcher.group(5));
|
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");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with 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 Gary Russell
|
||||||
* @author Artem Bilan
|
* @author Artem Bilan
|
||||||
|
* @author Karol Dowbecki
|
||||||
* @since 2.2
|
* @since 2.2
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@@ -59,7 +60,8 @@ public class SyslogTransformerParserTests {
|
|||||||
Object date = map.get(SyslogToMapTransformer.TIMESTAMP);
|
Object date = map.get(SyslogToMapTransformer.TIMESTAMP);
|
||||||
assertTrue(date instanceof Date || date instanceof String);
|
assertTrue(date instanceof Date || date instanceof String);
|
||||||
assertEquals("WEBERN", map.get(SyslogToMapTransformer.HOST));
|
assertEquals("WEBERN", map.get(SyslogToMapTransformer.HOST));
|
||||||
assertEquals("TESTING[70729]", map.get(SyslogToMapTransformer.TAG));
|
assertEquals("TESTING", map.get(SyslogToMapTransformer.TAG));
|
||||||
assertEquals("TEST SYSLOG MESSAGE", map.get(SyslogToMapTransformer.MESSAGE));
|
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");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with 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 Gary Russell
|
||||||
* @author Artem Bilan
|
* @author Artem Bilan
|
||||||
|
* @author Karol Dowbecki
|
||||||
* @since 2.2
|
* @since 2.2
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public class SysLogTransformerTests {
|
public class SysLogTransformerTests {
|
||||||
|
|
||||||
|
private SyslogToMapTransformer sut = new SyslogToMapTransformer();
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testMap() throws Exception {
|
public void testMap() 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(
|
Map<String, ?> transformed = sut.transformPayload(syslog.getBytes());
|
||||||
"<158>JUL 26 22:08:35 WEBERN TESTING[70729]: TEST SYSLOG MESSAGE".getBytes());
|
|
||||||
assertEquals(6, transformed.size());
|
assertEquals(6, transformed.size());
|
||||||
assertEquals(19, transformed.get(SyslogToMapTransformer.FACILITY));
|
assertEquals(19, transformed.get(SyslogToMapTransformer.FACILITY));
|
||||||
assertEquals(6, transformed.get(SyslogToMapTransformer.SEVERITY));
|
assertEquals(6, transformed.get(SyslogToMapTransformer.SEVERITY));
|
||||||
Object date = transformed.get(SyslogToMapTransformer.TIMESTAMP);
|
Object date = transformed.get(SyslogToMapTransformer.TIMESTAMP);
|
||||||
assertTrue(date instanceof Date || date instanceof String);
|
assertTrue(date instanceof Date || date instanceof String);
|
||||||
assertEquals("WEBERN", transformed.get(SyslogToMapTransformer.HOST));
|
assertEquals("WEBERN", transformed.get(SyslogToMapTransformer.HOST));
|
||||||
assertEquals("TESTING[70729]", transformed.get(SyslogToMapTransformer.TAG));
|
assertEquals("TESTING", transformed.get(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,
|
String[] fields = {SyslogToMapTransformer.FACILITY, SyslogToMapTransformer.SEVERITY,
|
||||||
SyslogToMapTransformer.SEVERITY, SyslogToMapTransformer.TIMESTAMP, SyslogToMapTransformer.HOST,
|
SyslogToMapTransformer.TIMESTAMP, SyslogToMapTransformer.HOST,
|
||||||
SyslogToMapTransformer.TAG, SyslogToMapTransformer.MESSAGE};
|
SyslogToMapTransformer.TAG, SyslogToMapTransformer.MESSAGE};
|
||||||
Object[] values = new Object[] {19, 6, date, "WEBERN", "TESTING[70729]", "TEST SYSLOG MESSAGE"};
|
Object[] values = {19, 6, date, "WEBERN", "TESTING", "[70729]: TEST SYSLOG MESSAGE"};
|
||||||
// check iteration order
|
assertIterationOrder(fields, values, transformed);
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testBadPattern() throws Exception {
|
public void testBadPattern() throws Exception {
|
||||||
SyslogToMapTransformer t = new SyslogToMapTransformer();
|
|
||||||
String syslog = "&158>JUL 26 22:08:35 WEBERN TESTING[70729]: TEST SYSLOG MESSAGE";
|
String syslog = "&158>JUL 26 22:08:35 WEBERN TESTING[70729]: TEST SYSLOG MESSAGE";
|
||||||
Map<String, ?> transformed = t.transformPayload(
|
Map<String, ?> transformed = sut.transformPayload(syslog.getBytes());
|
||||||
syslog.getBytes());
|
|
||||||
assertEquals(1, transformed.size());
|
assertEquals(1, transformed.size());
|
||||||
assertEquals(syslog, transformed.get(SyslogToMapTransformer.UNDECODED));
|
assertEquals(syslog, transformed.get(SyslogToMapTransformer.UNDECODED));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testBadFacilitySeverity() throws Exception {
|
public void testBadFacilitySeverity() throws Exception {
|
||||||
SyslogToMapTransformer t = new SyslogToMapTransformer();
|
|
||||||
String syslog = "<X58>JUL 26 22:08:35 WEBERN TESTING[70729]: TEST SYSLOG MESSAGE";
|
String syslog = "<X58>JUL 26 22:08:35 WEBERN TESTING[70729]: TEST SYSLOG MESSAGE";
|
||||||
Map<String, ?> transformed = t.transformPayload(
|
Map<String, ?> transformed = sut.transformPayload(syslog.getBytes());
|
||||||
syslog.getBytes());
|
|
||||||
assertEquals(1, transformed.size());
|
assertEquals(1, transformed.size());
|
||||||
assertEquals(syslog, transformed.get(SyslogToMapTransformer.UNDECODED));
|
assertEquals(syslog, transformed.get(SyslogToMapTransformer.UNDECODED));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testWithoutTag() throws Exception {
|
public void testWithoutTag() throws Exception {
|
||||||
SyslogToMapTransformer t = new SyslogToMapTransformer();
|
String syslog = "<158>JUL 26 22:08:35 WEBERN [70729]: TEST SYSLOG MESSAGE";
|
||||||
Map<String, ?> transformed = t.transformPayload(
|
Map<String, ?> transformed = sut.transformPayload(syslog.getBytes());
|
||||||
"<158>JUL 26 22:08:35 WEBERN TEST SYSLOG MESSAGE".getBytes());
|
|
||||||
assertEquals(5, transformed.size());
|
assertEquals(5, transformed.size());
|
||||||
assertEquals(19, transformed.get(SyslogToMapTransformer.FACILITY));
|
assertEquals(19, transformed.get(SyslogToMapTransformer.FACILITY));
|
||||||
assertEquals(6, transformed.get(SyslogToMapTransformer.SEVERITY));
|
assertEquals(6, transformed.get(SyslogToMapTransformer.SEVERITY));
|
||||||
@@ -97,25 +81,48 @@ public class SysLogTransformerTests {
|
|||||||
assertTrue(date instanceof Date || date instanceof String);
|
assertTrue(date instanceof Date || date instanceof String);
|
||||||
assertEquals("WEBERN", transformed.get(SyslogToMapTransformer.HOST));
|
assertEquals("WEBERN", transformed.get(SyslogToMapTransformer.HOST));
|
||||||
assertFalse(transformed.containsKey(SyslogToMapTransformer.TAG));
|
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,
|
String[] fields = {SyslogToMapTransformer.FACILITY, SyslogToMapTransformer.SEVERITY,
|
||||||
SyslogToMapTransformer.SEVERITY, SyslogToMapTransformer.TIMESTAMP, SyslogToMapTransformer.HOST,
|
SyslogToMapTransformer.TIMESTAMP, SyslogToMapTransformer.HOST,
|
||||||
SyslogToMapTransformer.MESSAGE};
|
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"};
|
@Test
|
||||||
// check iteration order
|
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;
|
int n = 0;
|
||||||
for (Entry<String, ?> entry : transformed.entrySet()) {
|
for (Entry<String, ?> entry : actualTransformed.entrySet()) {
|
||||||
assertEquals(fields[n++], entry.getKey());
|
assertEquals(expectedFields[n++], entry.getKey());
|
||||||
}
|
}
|
||||||
n = 0;
|
n = 0;
|
||||||
for (String key : transformed.keySet()) {
|
for (String key : actualTransformed.keySet()) {
|
||||||
assertEquals(fields[n++], key);
|
assertEquals(expectedFields[n++], key);
|
||||||
}
|
}
|
||||||
n = 0;
|
n = 0;
|
||||||
for (Object value : transformed.values()) {
|
for (Object value : actualTransformed.values()) {
|
||||||
assertEquals(values[n++], value);
|
assertEquals(expectedValues[n++], value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user