diff --git a/src/main/java/com/cloudbees/syslog/MessageFormat.java b/src/main/java/com/cloudbees/syslog/MessageFormat.java
index 5e03f09..23f336e 100644
--- a/src/main/java/com/cloudbees/syslog/MessageFormat.java
+++ b/src/main/java/com/cloudbees/syslog/MessageFormat.java
@@ -28,5 +28,9 @@ public enum MessageFormat {
/**
* RFC 5424 - The Syslog Protocol
*/
- RFC_5424
+ RFC_5424,
+ /**
+ * RFC 5425 - Transport Layer Security (TLS) Transport Mapping for Syslog
+ */
+ RFC_5425
}
diff --git a/src/main/java/com/cloudbees/syslog/SyslogMessage.java b/src/main/java/com/cloudbees/syslog/SyslogMessage.java
index f9a4e6d..765ccb2 100755
--- a/src/main/java/com/cloudbees/syslog/SyslogMessage.java
+++ b/src/main/java/com/cloudbees/syslog/SyslogMessage.java
@@ -17,12 +17,14 @@
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
+
import java.io.CharArrayWriter;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.net.InetAddress;
import java.net.UnknownHostException;
+import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.HashSet;
import java.util.Locale;
@@ -249,6 +251,8 @@ public String toSyslogMessage(MessageFormat messageFormat) {
return toRfc3164SyslogMessage();
case RFC_5424:
return toRfc5424SyslogMessage();
+ case RFC_5425:
+ return toRfc5425SyslogMessage();
default:
throw new IllegalStateException("Unsupported message format '" + messageFormat + "'");
}
@@ -269,11 +273,40 @@ public void toSyslogMessage(@Nonnull MessageFormat messageFormat, @Nonnull Write
case RFC_5424:
toRfc5424SyslogMessage(out);
break;
+ case RFC_5425:
+ toRfc5425SyslogMessage(out);
+ break;
default:
throw new IllegalStateException("Unsupported message format '" + messageFormat + "'");
}
}
+ /**
+ * Generates an RFC-5425 message.
+ */
+ public String toRfc5425SyslogMessage() {
+
+ StringWriter sw = new StringWriter(msg == null ? 32 : msg.size() + 32);
+ try {
+ toRfc5425SyslogMessage(sw);
+ } catch (IOException e) {
+ throw new IllegalStateException(e);
+ }
+ return sw.toString();
+ }
+
+ /**
+ * Generates an RFC-5425 message.
+ */
+ public void toRfc5425SyslogMessage(Writer out) throws IOException {
+
+ String rfc5424Message = toRfc5424SyslogMessage();
+ int length = rfc5424Message.getBytes(StandardCharsets.UTF_8).length;
+ out.write(String.valueOf(length));
+ out.write(SP);
+ out.write(rfc5424Message);
+ }
+
/**
* Generates an RFC-5424 message.
*/
diff --git a/src/test/java/com/cloudbees/syslog/SyslogMessageTest.java b/src/test/java/com/cloudbees/syslog/SyslogMessageTest.java
index 576ed77..3f615cb 100755
--- a/src/test/java/com/cloudbees/syslog/SyslogMessageTest.java
+++ b/src/test/java/com/cloudbees/syslog/SyslogMessageTest.java
@@ -28,6 +28,35 @@
*/
public class SyslogMessageTest {
+ @Test
+ public void testRfc5425Format() throws Exception {
+ // GIVEN
+ Calendar cal = Calendar.getInstance();
+ cal.setTimeZone(TimeZone.getTimeZone("GMT"));
+ cal.set(2013, Calendar.DECEMBER, 5, 10, 30, 5);
+ cal.set(Calendar.MILLISECOND, 0);
+
+ System.out.println(SyslogMessage.rfc3339DateFormat.format(cal.getTime()));
+ System.out.println(cal.getTimeInMillis());
+
+
+ SyslogMessage message = new SyslogMessage()
+ .withTimestamp(cal.getTimeInMillis())
+ .withAppName("my_app")
+ .withHostname("myserver.example.com")
+ .withFacility(Facility.USER)
+ .withSeverity(Severity.INFORMATIONAL)
+ .withTimestamp(cal.getTimeInMillis())
+ .withMsg("a syslog message");
+
+ // WHEN
+ String actual = message.toRfc5425SyslogMessage();
+
+ // THEN
+ String expected = "81 <14>1 2013-12-05T10:30:05.000Z myserver.example.com my_app - - - a syslog message";
+ assertThat(actual, is(expected));
+ }
+
@Test
public void testRfc5424Format() throws Exception {