public void testCreateMessage1() { final StructuredSyslogMessage message = new StructuredSyslogMessage("msgId", null, null, null); assertEquals("msgId [0@0]", message.createMessage()); }
public void testFromString1() { final String messageStr = "msgId1 [0@0] my message!!"; final StructuredSyslogMessage message = StructuredSyslogMessage.fromString(messageStr); assertEquals("msgId1 [0@0] my message!!",message.toString()); assertEquals(-108931075,message.hashCode()); assertEquals("my message!!", message.getMessage()); assertEquals("msgId1", message.getMessageId()); assertTrue(message.getStructuredData().size() == 0); }
while(start < stringMessage.length() && matchChar(stringMessage, start, '[') == start) { Preconditions.checkArgument(stringMessage.charAt(start) == '[', "Invalid structured data in syslog message '%s'", stringMessage); end = matchChar(stringMessage, start, ']'); Preconditions.checkArgument(end != -1 && stringMessage.charAt(end) == ']', "Invalid structured data in syslog message '%s'", stringMessage); while (start < end) { if (key == null) { final int keyEnd = matchChar(stringMessage, ++start, ']', ' '); // Key can be terminated by a space (then more fields to follow) or a ] key = stringMessage.substring(start, keyEnd); final int valueEnd = matchChar(stringMessage, equalsIndex + 2, '"'); Preconditions.checkArgument(valueEnd != -1 && stringMessage.charAt(valueEnd) == '"', "Invalid structured data in syslog message '%s'", stringMessage); keyMap.put(stringMessage.substring(start, equalsIndex), unescape(stringMessage.substring(equalsIndex + 2, valueEnd))); start = valueEnd + 1;
/** * Parses and loads a {@link StructuredSyslogMessage} from string. * * @param syslogMessageStr * @return Returns an instance of StructuredSyslogMessage. */ public static StructuredSyslogMessage fromString( final String syslogMessageStr) { final StructuredSyslogMessage syslogMessage = new StructuredSyslogMessage(); syslogMessage.deserialize(syslogMessageStr); return syslogMessage; }
private String serialize() { if (!StructuredSyslogMessage.checkIsPrintable(getMessageId())) throw new IllegalArgumentException("Invalid message id: " + getMessageId()); sb.append(StructuredSyslogMessage.nilProtect(getMessageId())); sb.append(' '); if (getStructuredData() == null || getStructuredData().size() == 0) { Set<Map.Entry<String, Map<String, String>>> sdEntrySet = getStructuredData().entrySet(); for (Iterator<Map.Entry<String, Map<String, String>>> it = sdEntrySet.iterator(); it.hasNext();) { final Map.Entry<String, Map<String, String>> sdElement = it.next(); final String sdId = sdElement.getKey(); if (StringUtils.isBlank(sdId) || !StructuredSyslogMessage.checkIsPrintable(sdId)) { throw new IllegalArgumentException("Illegal structured data id: " + sdId); if (StringUtils.isBlank(paramName) || !StructuredSyslogMessage.checkIsPrintable(paramName)) throw new IllegalArgumentException("Illegal structured data parameter name: " + paramName); sb.append(paramName); sb.append('=').append('"'); StructuredSyslogMessage.sdEscape(sb, paramValue); sb.append('"'); if (!StringUtils.isEmpty(getMessage())) { sb.append(' '); sb.append(StructuredSyslogMessage.nilProtect(getMessage()));
public void testStructuredSyslogEvent() throws Exception { InetAddress localhost = InetAddress.getLocalHost(); String message = "<165> 2003-10-11T22:14:15.003Z hostname appname process-id message-id [id@1234 test1=\"test2\"] test3"; StructuredSyslogServerEvent event = new StructuredSyslogServerEvent(message.getBytes(),message.length(),localhost); assertEquals("hostname",event.getHost()); assertEquals("appname",event.getApplicationName()); assertEquals("process-id",event.getProcessId()); StructuredSyslogMessage sm = event.getStructuredMessage(); assertEquals("message-id",sm.getMessageId()); assertEquals("test3",sm.getMessage()); Map<String, Map<String, String>> map = sm.getStructuredData(); assertTrue(map.containsKey("id@1234")); Map<String, String> item = map.get("id@1234"); assertTrue(item.containsKey("test1")); assertEquals("test2",item.get("test1")); }
@Override protected void append(final LoggingEvent event) { final SyslogIF syslog = getSyslog(); final SyslogLevel level = SyslogLevel.forValue(event.getLevel().getSyslogEquivalent()); final String messageId = UUID.randomUUID().toString().replace("-", ""); final String [] messageLines = StringUtils.split((layout != null) ? layout.format(event) : event.getRenderedMessage(), "\n\r"); for (int i = 0; i < messageLines.length; i++) { final Builder<String, String> b = ImmutableMap.builder(); b.put("l", event.getLoggerName()); b.put("c", Integer.toString(i)); if (serviceId != null) { b.put("si", serviceId); } if (serviceConfiguration != null) { b.put("sc", serviceConfiguration); } Object trackToken = event.getMDC("track"); if (trackToken != null) { b.put("t", trackToken.toString()); } Map<String, String> payload = b.build(); final String threadName = StringUtils.replaceChars(event.getThreadName()," \t", ""); final StructuredSyslogMessage structuredMessage = new StructuredSyslogMessage(messageId, threadName, ImmutableMap.of(ianaIdentifier, payload), messageLines[i]); syslog.log(level, structuredMessage); } }
public void testMessageWithEmptyStruct() throws Exception { final String message = "<134>1 2012-07-25T21:32:08.887+00:00 some-server.some.domain noprog qtp583592918-80437 95d42b22c48e4eadb59e61a182c102d4 [l@2][a@3 a=\"b\\\"c\"]"; final StructuredSyslogServerEvent ev = new StructuredSyslogServerEvent(message, InetAddress.getLocalHost()); final StructuredSyslogMessage msg = ev.getStructuredMessage(); Assert.assertEquals("95d42b22c48e4eadb59e61a182c102d4", msg.getMessageId()); Assert.assertNotNull(msg.getStructuredData()); Assert.assertNotNull(msg.getStructuredData().get("l@2")); Assert.assertNotNull(msg.getStructuredData().get("a@3")); Assert.assertEquals("b\"c", msg.getStructuredData().get("a@3").get("a")); }
public StructuredSyslogMessage getStructuredMessage() { return StructuredSyslogMessage.fromString(getMessage()); } }
@Test public void testMatchChar() throws Exception { Assert.assertEquals(2, StructuredSyslogMessage.matchChar("hello", 0, 'l')); Assert.assertEquals(2, StructuredSyslogMessage.matchChar("hello", 2, 'l')); Assert.assertEquals(3, StructuredSyslogMessage.matchChar("hello", 3, 'l')); Assert.assertEquals(-1, StructuredSyslogMessage.matchChar("hello", 4, 'l')); Assert.assertEquals(-1, StructuredSyslogMessage.matchChar("hello", 10, 'l')); Assert.assertEquals(2, StructuredSyslogMessage.matchChar("\\ll", 0, 'l')); Assert.assertEquals(-1, StructuredSyslogMessage.matchChar("\\l\\l", 0, 'l')); Assert.assertEquals(-1, StructuredSyslogMessage.matchChar("\\", 0, 'x')); Assert.assertEquals(-1, StructuredSyslogMessage.matchChar("foo\\", 0, 'x')); Assert.assertEquals(-1, StructuredSyslogMessage.matchChar("this\\\"is\\ a\\ test.", 0, ' ')); }
public void testMessageWithSpace() throws Exception { final String message = "<134>1 2012-07-25T21:32:08.887+00:00 some-server.some.domain noprog qtp583592918-80437 95d42b22c48e4eadb59e61a182c102d4 [rh@12345 xxx=\"hell0 7|133454|00022f444ad7fe10ef5d0d536ae879f1\"]'"; final StructuredSyslogServerEvent ev = new StructuredSyslogServerEvent(message, InetAddress.getLocalHost()); final StructuredSyslogMessage msg = ev.getStructuredMessage(); Assert.assertNotNull(msg.getStructuredData().get("rh@12345")); Assert.assertEquals("hell0 7|133454|00022f444ad7fe10ef5d0d536ae879f1", msg.getStructuredData().get("rh@12345").get("xxx")); } }
public void log(SyslogLevel level, String message) { if (this.syslogConfig.isUseStructuredData()) { StructuredSyslogMessageIF structuredMessage = new StructuredSyslogMessage(null,null,null,message); log(getStructuredMessageProcessor(),level, null, structuredMessage.createMessage()); } else { log(getMessageProcessor(),level, null, message); } }
public void testMessageWithNulls() throws Exception { final String message = "<134>1 2012-07-25T21:32:08.887+00:00 some-server.some.domain noprog qtp583592918-80437 95d42b22c48e4eadb59e61a182c102d4 [l@2 si=\"some-server-s4\" sc=\"/a/b-c/d\" ip=\"1.2.3.4\" m=\"GET\" u=\"http://1.2.3.4:8081/path/PATH:12345/path\" q=\"source=SERVICE\" rc=\"200\" t=\"12\"][co@2 auth-cookie=\"jskldjskldjasskljlaskjas\"][rs@2 some-header=\"4054630f-8d31-457c-b1ff-2f2b465d69ef\"] nomsg"; final StructuredSyslogServerEvent ev = new StructuredSyslogServerEvent(message, InetAddress.getLocalHost()); final StructuredSyslogMessage msg = ev.getStructuredMessage(); Assert.assertEquals("95d42b22c48e4eadb59e61a182c102d4", msg.getMessageId()); Assert.assertNotNull(msg.getStructuredData()); Assert.assertNotNull(msg.getStructuredData().get("l@2")); Assert.assertEquals("/a/b-c/d", msg.getStructuredData().get("l@2").get("sc")); }
public void testFromString4() { final String messageStr = "msgId1 [data1 a=\"b] my message!!"; try { StructuredSyslogMessage.fromString(messageStr); fail(); } catch (IllegalArgumentException iae) { // } }
public void testFromString1b() { final String messageStr = "msgId1 [type a=\"[xx\\] xx\"] my [second] message!!"; final StructuredSyslogMessage message = StructuredSyslogMessage.fromString(messageStr); assertEquals("msgId1 [type a=\"[xx\\] xx\"] my [second] message!!",message.toString()); assertEquals("my [second] message!!", message.getMessage()); assertEquals("msgId1", message.getMessageId()); assertEquals("[xx] xx", (message.getStructuredData().get("type")).get("a")); }
public void testCreateMessage2() { final StructuredSyslogMessage message = new StructuredSyslogMessage("msgId", null, null, "my message"); assertEquals("msgId [0@0] my message", message.createMessage()); }
public void testStructuredSyslogMessage() { SyslogConfigIF config = new UDPNetSyslogConfig(); config.setUseStructuredData(true); assertTrue(config.isUseStructuredData()); config.setUseStructuredData(false); assertFalse(config.isUseStructuredData()); SyslogIF syslog = Syslog.createInstance("testStructuredSyslog",config); SyslogMessageProcessorIF messageProcessor = new StructuredSyslogMessageProcessor(); syslog.setStructuredMessageProcessor(messageProcessor); assertEquals(messageProcessor,syslog.getStructuredMessageProcessor()); SyslogMessageIF m1 = new StructuredSyslogMessage("test1",null, Maps.<String, Map<String, String>>newHashMap(),"test2"); SyslogMessageIF m2 = new StructuredSyslogMessage("test1",null, Maps.<String, Map<String, String>>newHashMap(),"test2"); SyslogMessageIF m3 = new StructuredSyslogMessage("test3",null, Maps.<String, Map<String, String>>newHashMap(),"test2"); SyslogMessageIF m4 = new StructuredSyslogMessage("test1",null, Maps.<String, Map<String, String>>newHashMap(),"test4"); assertFalse(m1.equals(null)); assertFalse(m1.equals("Wrong Class")); assertTrue(m1.equals(m1)); assertTrue(m2.equals(m2)); assertFalse(m1.equals(m3)); assertFalse(m1.equals(m4)); }
public void testFromString5() { final String messageStr = "msgId1 [data1 a=b\"] my message!!"; try { StructuredSyslogMessage.fromString(messageStr); fail(); } catch (IllegalArgumentException iae) { // } }
public void testFromString1a() { final String messageStr = "msgId1 [type a=\"[xx\\] xx\"] [first] my message!!"; final StructuredSyslogMessage message = StructuredSyslogMessage.fromString(messageStr); assertEquals("msgId1 [type a=\"[xx\\] xx\"] [first] my message!!",message.toString()); assertEquals("[first] my message!!", message.getMessage()); assertEquals("msgId1", message.getMessageId()); assertEquals("[xx] xx", (message.getStructuredData().get("type")).get("a")); }
public void testCreateMessage3() { final StructuredSyslogMessage message = new StructuredSyslogMessage("msgId", null, Maps.<String, Map<String, String>>newHashMap(), "my message"); assertEquals("msgId [0@0] my message", message.createMessage()); }