Index: core/src/test/java/org/apache/logging/log4j/core/layout/SyslogLayoutTest.java
===================================================================
--- core/src/test/java/org/apache/logging/log4j/core/layout/SyslogLayoutTest.java	(revision 1425101)
+++ core/src/test/java/org/apache/logging/log4j/core/layout/SyslogLayoutTest.java	(working copy)
@@ -73,7 +73,7 @@
     public void testLayout() throws Exception {
 
         // set up appender
-        final SyslogLayout layout = SyslogLayout.createLayout("Local0", "true", null);
+        final SyslogLayout layout = SyslogLayout.createLayout("Local0", "true", null, null);
         //ConsoleAppender appender = new ConsoleAppender("Console", layout);
         final ListAppender appender = new ListAppender("List", null, layout, true, false);
         appender.start();
Index: core/src/test/java/org/apache/logging/log4j/core/layout/RFC5424LayoutTest.java
===================================================================
--- core/src/test/java/org/apache/logging/log4j/core/layout/RFC5424LayoutTest.java	(revision 1425101)
+++ core/src/test/java/org/apache/logging/log4j/core/layout/RFC5424LayoutTest.java	(working copy)
@@ -77,7 +77,7 @@
 
         // set up appender
         final RFC5424Layout layout = RFC5424Layout.createLayout("Local0", "Event", "3692", "true", "RequestContext",
-            "true", "ATM", null, "key1, key2, locale", null, "loginId", null, null);
+            "true", null, "ATM", null, "key1, key2, locale", null, "loginId", null, null, null);
         final ListAppender appender = new ListAppender("List", null, layout, true, false);
         appender.start();
 
Index: core/src/test/java/org/apache/logging/log4j/core/appender/SyslogAppenderTest.java
===================================================================
--- core/src/test/java/org/apache/logging/log4j/core/appender/SyslogAppenderTest.java	(revision 1425101)
+++ core/src/test/java/org/apache/logging/log4j/core/appender/SyslogAppenderTest.java	(working copy)
@@ -211,8 +211,8 @@
 
     private SyslogAppender createAppender(final String protocol, final String format) {
         return SyslogAppender.createAppender("localhost", PORT, protocol, "-1", "Test", "true", "false", "LOCAL0", "Audit",
-            "18060", "true", "RequestContext", "true", "TestApp", "Test", null, "ipAddress,loginId", null, format, null,
-                null, null);
+            "18060", "true", "RequestContext", "true", null, "TestApp", "Test", null, "ipAddress,loginId", null, format, null,
+                null, null, null);
     }
 
     public static class UDPSocketServer extends Thread {
Index: core/src/main/java/org/apache/logging/log4j/core/layout/RFC5424Layout.java
===================================================================
--- core/src/main/java/org/apache/logging/log4j/core/layout/RFC5424Layout.java	(revision 1425101)
+++ core/src/main/java/org/apache/logging/log4j/core/layout/RFC5424Layout.java	(working copy)
@@ -25,6 +25,8 @@
 import org.apache.logging.log4j.core.config.plugins.PluginFactory;
 import org.apache.logging.log4j.core.net.Facility;
 import org.apache.logging.log4j.core.net.Priority;
+import org.apache.logging.log4j.core.pattern.LogEventPatternConverter;
+import org.apache.logging.log4j.core.pattern.ThrowablePatternConverter;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.StructuredDataId;
 import org.apache.logging.log4j.message.StructuredDataMessage;
@@ -42,6 +44,8 @@
 import java.util.Map;
 import java.util.SortedMap;
 import java.util.TreeMap;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 
 /**
@@ -58,6 +62,10 @@
      * The default event id.
      */
     public static final String DEFAULT_ID = "Audit";
+    /**
+     * Match newlines in a platform-independent manner
+     */
+    public static final Pattern NEWLINE_PATTERN = Pattern.compile("\\r?\\n");
 
     private static final String DEFAULT_MDCID = "mdc";
     private static final int TWO_DIGITS = 10;
@@ -80,24 +88,29 @@
     private final ListChecker checker;
     private final ListChecker noopChecker = new NoopChecker();
     private final boolean includeNewLine;
+    private final String escapeNewLine;
+    private final LogEventPatternConverter exceptionConverter;
 
     private long lastTimestamp = -1;
     private String timestamppStr;
 
 
     private RFC5424Layout(final Configuration config, final Facility facility, final String id, final int ein, final boolean includeMDC,
-                          final boolean includeNL, final String mdcId, final String appName, final String messageId, final String excludes,
-                          final String includes, final String required, final Charset charset) {
+                          final boolean includeNL, final String escapeNL, final String mdcId, final String appName, final String messageId,
+                          final String excludes, final String includes, final String required, final Charset charset, final String exceptionConverstion) {
         super(charset);
         this.facility = facility;
         this.defaultId = id == null ? DEFAULT_ID : id;
         this.enterpriseNumber = ein;
         this.includeMDC = includeMDC;
         this.includeNewLine = includeNL;
+        this.escapeNewLine = escapeNL == null ? null : Matcher.quoteReplacement(escapeNL);
         this.mdcId = mdcId;
         this.appName = appName;
         this.messageId = messageId;
         this.localHostName = getLocalHostname();
+        this.exceptionConverter = null == exceptionConverstion ? null : ThrowablePatternConverter.newInstance(new String[] {exceptionConverstion});
+        
         ListChecker c = null;
         if (excludes != null) {
             final String[] array = excludes.split(",");
@@ -204,18 +217,31 @@
                 formatStructuredElement(mdcSDID, event.getContextMap(), buf, checker);
             }
             if (text != null && text.length() > 0) {
-                buf.append(" ").append(text);
+                buf.append(" ").append(escapeNewlines(text, escapeNewLine));
             }
         } else {
             buf.append("- ");
-            buf.append(msg.getFormattedMessage());
+            buf.append(escapeNewlines(msg.getFormattedMessage(), escapeNewLine));
         }
+        if (null != exceptionConverter) {
+            StringBuilder exception = new StringBuilder("\n");
+            exceptionConverter.format(event, exception);
+            buf.append(escapeNewlines(exception.toString(), escapeNewLine));
+        }
         if (includeNewLine) {
             buf.append("\n");
         }
         return buf.toString();
     }
 
+    private String escapeNewlines(String text, String escapeNewLine)
+    {
+        if(null == escapeNewLine) {
+            return text;
+        }
+        return NEWLINE_PATTERN.matcher(text).replaceAll(escapeNewLine);
+    }
+
     protected String getProcId() {
         return "-";
     }
@@ -433,12 +459,13 @@
      * record. Defaults to "true:.
      * @param mdcId The id to use for the MDC Structured Data Element.
      * @param includeNL If true, a newline will be appended to the end of the syslog record. The default is false.
+     * @param newlineEscape String that should be used to replace newlines within the message text
      * @param appName The value to use as the APP-NAME in the RFC 5424 syslog record.
      * @param msgId The default value to be used in the MSGID field of RFC 5424 syslog records.
      * @param excludes A comma separated list of mdc keys that should be excluded from the LogEvent.
      * @param includes A comma separated list of mdc keys that should be included in the FlumeEvent.
      * @param required A comma separated list of mdc keys that must be present in the MDC.
-     * @param charset The character set.
+     * @param charsetName The character set.
      * @param config The Configuration. Some Converters require access to the Interpolator.
      * @return An RFC5424Layout.
      */
@@ -449,21 +476,27 @@
                                              @PluginAttr("includeMDC") final String includeMDC,
                                              @PluginAttr("mdcId") String mdcId,
                                              @PluginAttr("newLine") final String includeNL,
+                                             @PluginAttr("newLineEscape") final String escapeNL,
                                              @PluginAttr("appName") final String appName,
                                              @PluginAttr("messageId") final String msgId,
                                              @PluginAttr("mdcExcludes") final String excludes,
                                              @PluginAttr("mdcIncludes") String includes,
                                              @PluginAttr("mdcRequired") final String required,
-                                             @PluginAttr("charset") final String charset,
+                                             @PluginAttr("charset") final String charsetName,
+                                             @PluginAttr("exceptionConverstion") final String exceptionConverstion,
                                              @PluginConfiguration final Configuration config) {
-        Charset c = Charset.isSupported("UTF-8") ? Charset.forName("UTF-8") : Charset.defaultCharset();
-        if (charset != null) {
-            if (Charset.isSupported(charset)) {
-                c = Charset.forName(charset);
+        Charset charset = null;
+        if (charsetName != null) {
+            if (Charset.isSupported(charsetName)) {
+                charset = Charset.forName(charsetName);
             } else {
-                LOGGER.error("Charset " + charset + " is not supported for layout, using " + c.displayName());
+                LOGGER.error("Charset " + charsetName + " is not supported for layout, using " + charset.displayName());
             }
         }
+        if(charset == null) {
+            charset = Charset.isSupported("UTF-8") ? Charset.forName("UTF-8") : Charset.defaultCharset();
+        }
+        
         if (includes != null && excludes != null) {
             LOGGER.error("mdcIncludes and mdcExcludes are mutually exclusive. Includes wil be ignored");
             includes = null;
@@ -476,7 +509,7 @@
             mdcId = DEFAULT_MDCID;
         }
 
-        return new RFC5424Layout(config, f, id, enterpriseNumber, isMdc, includeNewLine, mdcId, appName, msgId,
-                                 excludes, includes, required, c);
+        return new RFC5424Layout(config, f, id, enterpriseNumber, isMdc, includeNewLine, escapeNL, mdcId, appName, msgId,
+                                 excludes, includes, required, charset, exceptionConverstion);
     }
 }
Index: core/src/main/java/org/apache/logging/log4j/core/layout/SyslogLayout.java
===================================================================
--- core/src/main/java/org/apache/logging/log4j/core/layout/SyslogLayout.java	(revision 1425101)
+++ core/src/main/java/org/apache/logging/log4j/core/layout/SyslogLayout.java	(working copy)
@@ -29,6 +29,8 @@
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.Locale;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 
 /**
@@ -36,9 +38,14 @@
  */
 @Plugin(name = "SyslogLayout", type = "Core", elementType = "layout", printObject = true)
 public class SyslogLayout extends AbstractStringLayout {
+    /**
+     * Match newlines in a platform-independent manner
+     */
+    public static final Pattern NEWLINE_PATTERN = Pattern.compile("\\r?\\n");
 
     private final Facility facility;
     private final boolean includeNewLine;
+    private final String escapeNewLine;
 
     /**
      * Date format used if header = true.
@@ -50,10 +57,12 @@
     private final String localHostname = getLocalHostname();
 
 
-    protected SyslogLayout(final Facility facility, final boolean includeNL, final Charset c) {
+
+    protected SyslogLayout(final Facility facility, final boolean includeNL, final String escapeNL, final Charset c) {
         super(c);
         this.facility = facility;
         this.includeNewLine = includeNL;
+        this.escapeNewLine = escapeNL == null ? null : Matcher.quoteReplacement(escapeNL);
     }
 
     /**
@@ -72,7 +81,14 @@
         buf.append(" ");
         buf.append(localHostname);
         buf.append(" ");
-        buf.append(event.getMessage().getFormattedMessage());
+        
+        String message = event.getMessage().getFormattedMessage();
+        if(null != escapeNewLine)
+        {
+            message = NEWLINE_PATTERN.matcher(message).replaceAll(escapeNewLine);
+        }
+        buf.append(message);
+        
         if (includeNewLine) {
             buf.append("\n");
         }
@@ -115,6 +131,7 @@
     @PluginFactory
     public static SyslogLayout createLayout(@PluginAttr("facility") final String facility,
                                             @PluginAttr("newLine") final String includeNL,
+                                            @PluginAttr("newLineEscape") final String escapeNL,
                                             @PluginAttr("charset") final String charset) {
 
         Charset c = Charset.isSupported("UTF-8") ? Charset.forName("UTF-8") : Charset.defaultCharset();
@@ -127,6 +144,6 @@
         }
         final boolean includeNewLine = includeNL == null ? false : Boolean.valueOf(includeNL);
         final Facility f = Facility.toFacility(facility, Facility.LOCAL0);
-        return new SyslogLayout(f, includeNewLine, c);
+        return new SyslogLayout(f, includeNewLine, escapeNL, c);
     }
 }
Index: core/src/main/java/org/apache/logging/log4j/core/appender/SyslogAppender.java
===================================================================
--- core/src/main/java/org/apache/logging/log4j/core/appender/SyslogAppender.java	(revision 1425101)
+++ core/src/main/java/org/apache/logging/log4j/core/appender/SyslogAppender.java	(working copy)
@@ -89,6 +89,7 @@
                                                 @PluginAttr("includeMDC") final String includeMDC,
                                                 @PluginAttr("mdcId") final String mdcId,
                                                 @PluginAttr("newLine") final String includeNL,
+                                                @PluginAttr("newLineEscape") final String escapeNL,
                                                 @PluginAttr("appName") final String appName,
                                                 @PluginAttr("messageId") final String msgId,
                                                 @PluginAttr("mdcExcludes") final String excludes,
@@ -97,7 +98,8 @@
                                                 @PluginAttr("format") final String format,
                                                 @PluginElement("filters") final Filter filter,
                                                 @PluginConfiguration final Configuration config,
-                                                @PluginAttr("charset") final String charset) {
+                                                @PluginAttr("charset") final String charset,
+                                                @PluginAttr("exceptionConverstion") final String exceptionConverstion) {
 
         final boolean isFlush = immediateFlush == null ? true : Boolean.valueOf(immediateFlush);
         final boolean handleExceptions = suppress == null ? true : Boolean.valueOf(suppress);
@@ -112,9 +114,9 @@
             }
         }
         final Layout layout = (RFC5424.equalsIgnoreCase(format)) ?
-            RFC5424Layout.createLayout(facility, id, ein, includeMDC, mdcId, includeNL, appName,  msgId,
-                excludes, includes, required, charset, config) :
-            SyslogLayout.createLayout(facility, includeNL, charset);
+            RFC5424Layout.createLayout(facility, id, ein, includeMDC, mdcId, includeNL, escapeNL, appName,
+                msgId, excludes, includes, required, charset, exceptionConverstion, config) :
+            SyslogLayout.createLayout(facility, includeNL, escapeNL, charset);
 
         if (name == null) {
             LOGGER.error("No name provided for SyslogAppender");
