Skip to content

Commit 8296e34

Browse files
author
Sylvain Brocard
committed
Add support for RFC 5425
1 parent 3723853 commit 8296e34

File tree

3 files changed

+70
-1
lines changed

3 files changed

+70
-1
lines changed

src/main/java/com/cloudbees/syslog/MessageFormat.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,9 @@ public enum MessageFormat {
2828
/**
2929
* <a href="https://tools.ietf.org/html/rfc5424">RFC 5424 - The Syslog Protocol</a>
3030
*/
31-
RFC_5424
31+
RFC_5424,
32+
/**
33+
* <a href="https://tools.ietf.org/html/rfc5425">RFC 5425 - Transport Layer Security (TLS) Transport Mapping for Syslog</a>
34+
*/
35+
RFC_5425
3236
}

src/main/java/com/cloudbees/syslog/SyslogMessage.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,15 @@
1717

1818
import javax.annotation.Nonnull;
1919
import javax.annotation.Nullable;
20+
21+
import java.io.ByteArrayOutputStream;
2022
import java.io.CharArrayWriter;
2123
import java.io.IOException;
2224
import java.io.StringWriter;
2325
import java.io.Writer;
2426
import java.net.InetAddress;
2527
import java.net.UnknownHostException;
28+
import java.nio.charset.StandardCharsets;
2629
import java.util.Date;
2730
import java.util.HashSet;
2831
import java.util.Locale;
@@ -249,6 +252,8 @@ public String toSyslogMessage(MessageFormat messageFormat) {
249252
return toRfc3164SyslogMessage();
250253
case RFC_5424:
251254
return toRfc5424SyslogMessage();
255+
case RFC_5425:
256+
return toRfc5425SyslogMessage();
252257
default:
253258
throw new IllegalStateException("Unsupported message format '" + messageFormat + "'");
254259
}
@@ -269,11 +274,42 @@ public void toSyslogMessage(@Nonnull MessageFormat messageFormat, @Nonnull Write
269274
case RFC_5424:
270275
toRfc5424SyslogMessage(out);
271276
break;
277+
case RFC_5425:
278+
toRfc5425SyslogMessage(out);
279+
break;
272280
default:
273281
throw new IllegalStateException("Unsupported message format '" + messageFormat + "'");
274282
}
275283
}
276284

285+
/**
286+
* Generates an <a href="http://tools.ietf.org/html/rfc5424">RFC-5425</a> message.
287+
*/
288+
public String toRfc5425SyslogMessage() {
289+
290+
StringWriter sw = new StringWriter(msg == null ? 32 : msg.size() + 32);
291+
try {
292+
toRfc5425SyslogMessage(sw);
293+
} catch (IOException e) {
294+
throw new IllegalStateException(e);
295+
}
296+
return sw.toString();
297+
}
298+
299+
/**
300+
* Generates an <a href="http://tools.ietf.org/html/rfc5425">RFC-5425</a> message.
301+
*/
302+
public void toRfc5425SyslogMessage(Writer out) throws IOException {
303+
304+
StringWriter sw = new StringWriter(msg == null ? 32 : msg.size() + 32);
305+
toRfc5424SyslogMessage(sw);
306+
String rfc5424Message = sw.toString();
307+
int length = rfc5424Message.getBytes(StandardCharsets.UTF_8).length;
308+
out.write(String.valueOf(length));
309+
out.write(SP);
310+
out.write(rfc5424Message);
311+
}
312+
277313
/**
278314
* Generates an <a href="http://tools.ietf.org/html/rfc5424">RFC-5424</a> message.
279315
*/

src/test/java/com/cloudbees/syslog/SyslogMessageTest.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,35 @@
2828
*/
2929
public class SyslogMessageTest {
3030

31+
@Test
32+
public void testRfc5425Format() throws Exception {
33+
// GIVEN
34+
Calendar cal = Calendar.getInstance();
35+
cal.setTimeZone(TimeZone.getTimeZone("GMT"));
36+
cal.set(2013, Calendar.DECEMBER, 5, 10, 30, 5);
37+
cal.set(Calendar.MILLISECOND, 0);
38+
39+
System.out.println(SyslogMessage.rfc3339DateFormat.format(cal.getTime()));
40+
System.out.println(cal.getTimeInMillis());
41+
42+
43+
SyslogMessage message = new SyslogMessage()
44+
.withTimestamp(cal.getTimeInMillis())
45+
.withAppName("my_app")
46+
.withHostname("myserver.example.com")
47+
.withFacility(Facility.USER)
48+
.withSeverity(Severity.INFORMATIONAL)
49+
.withTimestamp(cal.getTimeInMillis())
50+
.withMsg("a syslog message");
51+
52+
// WHEN
53+
String actual = message.toRfc5425SyslogMessage();
54+
55+
// THEN
56+
String expected = "81 <14>1 2013-12-05T10:30:05.000Z myserver.example.com my_app - - - a syslog message";
57+
assertThat(actual, is(expected));
58+
}
59+
3160
@Test
3261
public void testRfc5424Format() throws Exception {
3362

0 commit comments

Comments
 (0)