Index: log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableFormatOptions.java
===================================================================
--- log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableFormatOptions.java	(revision 1517757)
+++ log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableFormatOptions.java	(working copy)
@@ -220,7 +220,12 @@
                 } else if (option.equalsIgnoreCase(SHORT)) {
                     lines = 2;
                 } else if (!option.equalsIgnoreCase(FULL)) {
-                    lines = Integer.parseInt(option);
+                    try {
+                        lines = Integer.parseInt(option);
+                    }
+                    catch (NumberFormatException e) {
+                        lines = DEFAULT_LINES;
+                    }
                 }
             }
         }
Index: log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/CustomShortThrowablePatternConverter.java
===================================================================
--- log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/CustomShortThrowablePatternConverter.java	(revision 0)
+++ log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/CustomShortThrowablePatternConverter.java	(working copy)
@@ -0,0 +1,92 @@
+package org.apache.logging.log4j.core.pattern;
+
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.config.plugins.Plugin;
+
+/**
+ * Outputs information about the exception and the place where it was thrown
+ * <p>
+ * You can get these information:
+ *  the class name, where it is in:                 %csThrowable{className}
+ *  the file name, where it is in:                  %csThrowable{fileName}
+ *  the line number, where the exception occured:   %csThrowable{lineNumber}
+ *  the message:                                    %csThrowable{message}
+ *  the method name, which threw the exception:     %csThrowable{methodName}
+ */
+@Plugin(name = "CustomShortThrowablePatternConverter", category = "Converter")
+@ConverterKeys({"csEx", "csThrowable", "csException" })
+public class CustomShortThrowablePatternConverter extends ThrowablePatternConverter {
+
+    private static final String CLASS_NAME = "className";
+    private static final String METHOD_NAME = "methodName";
+    private static final String LINE_NUMBER = "lineNumber";
+    private static final String FILE_NAME = "fileName";
+    private static final String MESSAGE = "message";
+    private String rawOption;
+
+    /**
+     * Constructor.
+     *
+     * @param options options, may be null.
+     */
+    protected CustomShortThrowablePatternConverter(String[] options) {
+        super("CustomShortThrowable", "throwable", options);
+        if (options != null && options.length > 0)
+            rawOption = options[0];
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public static CustomShortThrowablePatternConverter newInstance(final String[] options) {
+        return new CustomShortThrowablePatternConverter(options);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void format(final LogEvent event, final StringBuilder toAppendTo) {
+        Throwable t = event.getThrown();
+        StackTraceElement[] trace;
+        StackTraceElement throwingMethod = null;
+        int len;
+
+        if (t != null) {
+            trace = t.getStackTrace();
+            if (trace !=null && trace.length > 0) {
+                throwingMethod = trace[0];
+            }
+        }
+
+        if (t != null && throwingMethod != null) {
+            String toAppend = "";
+
+            if (CLASS_NAME.equalsIgnoreCase(rawOption)) {
+                toAppend = throwingMethod.getClassName();
+            }
+            else if (METHOD_NAME.equalsIgnoreCase(rawOption)) {
+                toAppend = throwingMethod.getMethodName();
+            }
+            else if (LINE_NUMBER.equalsIgnoreCase(rawOption)) {
+                toAppend = String.valueOf(throwingMethod.getLineNumber());
+            }
+            else if (MESSAGE.equalsIgnoreCase(rawOption)) {
+                toAppend = t.toString();
+            }
+            else if (FILE_NAME.equalsIgnoreCase(rawOption)) {
+                toAppend = throwingMethod.getFileName();
+            }
+            else {
+                toAppend = String.format("%s.%s:%s %s", throwingMethod.getClassName(), throwingMethod.getMethodName(),
+                        String.valueOf(throwingMethod.getLineNumber()), t.getMessage());
+            }
+
+            len = toAppendTo.length();
+            if (len > 0 && !Character.isWhitespace(toAppendTo.charAt(len - 1))) {
+                toAppendTo.append(" ");
+            }
+            toAppendTo.append(toAppend);
+        }
+    }
+}
Index: log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/CustomShortThrowablePatternConverterTest.java
===================================================================
--- log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/CustomShortThrowablePatternConverterTest.java	(revision 0)
+++ log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/CustomShortThrowablePatternConverterTest.java	(working copy)
@@ -0,0 +1,88 @@
+package org.apache.logging.log4j.core.pattern;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.impl.Log4jLogEvent;
+import org.apache.logging.log4j.message.SimpleMessage;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+public class CustomShortThrowablePatternConverterTest {
+
+    @Test
+    public void testFileName() {
+        final String[] options = { "fileName" };
+        final CustomShortThrowablePatternConverter converter = CustomShortThrowablePatternConverter.newInstance(options);
+        final Throwable cause = new NullPointerException("null pointer");
+        final Throwable parent = new IllegalArgumentException("IllegalArgument", cause);
+        final LogEvent event = new Log4jLogEvent("testLogger", null, this.getClass().getName(), Level.DEBUG,
+                new SimpleMessage("test exception"), parent);
+        final StringBuilder sb = new StringBuilder();
+        converter.format(event, sb);
+        final String result = sb.toString();
+        assertEquals("The file names should be same", "CustomShortThrowablePatternConverterTest.java", result);
+    }
+
+    @Test
+    public void testClassName() {
+        final String packageName = "org.apache.logging.log4j.core.pattern.";
+        final String[] options = { "className" };
+        final CustomShortThrowablePatternConverter converter = CustomShortThrowablePatternConverter.newInstance(options);
+        final Throwable cause = new NullPointerException("null pointer");
+        final Throwable parent = new IllegalArgumentException("IllegalArgument", cause);
+        final LogEvent event = new Log4jLogEvent("testLogger", null, this.getClass().getName(), Level.DEBUG,
+                new SimpleMessage("test exception"), parent);
+        final StringBuilder sb = new StringBuilder();
+        converter.format(event, sb);
+        final String result = sb.toString();
+        assertEquals("The class names should be same", packageName + "CustomShortThrowablePatternConverterTest", result);
+    }
+
+    @Test
+    public void testMethodName() {
+        final String[] options = { "methodName" };
+        final CustomShortThrowablePatternConverter converter = CustomShortThrowablePatternConverter.newInstance(options);
+        final Throwable cause = new NullPointerException("null pointer");
+        final Throwable parent = new IllegalArgumentException("IllegalArgument", cause);
+        final LogEvent event = new Log4jLogEvent("testLogger", null, this.getClass().getName(), Level.DEBUG,
+                new SimpleMessage("test exception"), parent);
+        final StringBuilder sb = new StringBuilder();
+        converter.format(event, sb);
+        final String result = sb.toString();
+        assertEquals("The method names should be same", "testMethodName", result);
+    }
+
+    @Test
+    public void testLineNumber() {
+        final String[] options = { "lineNumber" };
+        final CustomShortThrowablePatternConverter converter = CustomShortThrowablePatternConverter.newInstance(options);
+        final Throwable cause = new NullPointerException("null pointer");
+        final Throwable parent = new IllegalArgumentException("IllegalArgument", cause);
+        StackTraceElement top = parent.getStackTrace()[0];
+        final int expectedLineNumber = top.getLineNumber();
+
+        final LogEvent event = new Log4jLogEvent("testLogger", null, this.getClass().getName(), Level.DEBUG,
+                new SimpleMessage("test exception"), parent);
+        final StringBuilder sb = new StringBuilder();
+        converter.format(event, sb);
+        final String result = sb.toString();
+        assertTrue("The line numbers should be same", expectedLineNumber == Integer.valueOf(result));
+    }
+
+    @Test
+    public void testDefault() {
+        final String[] options = { "" };
+        final CustomShortThrowablePatternConverter converter = CustomShortThrowablePatternConverter.newInstance(options);
+        final Throwable cause = new NullPointerException("null pointer");
+        final Throwable parent = new IllegalArgumentException("IllegalArgument", cause);
+
+        final LogEvent event = new Log4jLogEvent("testLogger", null, this.getClass().getName(), Level.DEBUG,
+                new SimpleMessage("test exception"), parent);
+        final StringBuilder sb = new StringBuilder();
+        converter.format(event, sb);
+        final String result = sb.toString();
+        assertTrue("It should have a default case", result.endsWith(parent.getMessage()));
+    }
+}
Index: src/site/xdoc/manual/layouts.xml.vm
===================================================================
--- src/site/xdoc/manual/layouts.xml.vm	(revision 1517757)
+++ src/site/xdoc/manual/layouts.xml.vm	(working copy)
@@ -301,6 +301,24 @@
               </td>
             </tr>
             <tr>
+                <td align="center">
+                  <b>csEx</b>{["className"|"fileName"|"lineNumber"|"methodName"|"message"]}<br />
+                  <b>csException</b>{["className"|"fileName"|"lineNumber"|"methodName"|"message"]}<br />
+                  <b>csThrowable</b>{["className"|"fileName"|"lineNumber"|"methodName"|"message"]}
+                </td>
+                <td>
+                    <p>Outputs information about the exception and the place where it was thrown,
+                      default this will output something like this: foo.bar.ClassName.methodName:123 Exception Message
+                      The csThrowable conversion word can be followed by an option in the form
+                      <b>%csThrowable{className}</b> which will only output the name of the class where the exception occured,
+                      <b>%csThrowable{methodName}</b> which will print the method name where the exception occured,
+                      <b>%csThrowable{fileName}</b> which will write out the name of the class where the exception occured,
+                      <b>%csThrowable{lineNumber}</b> which will output the line number where the exception occured,
+                      <b>%csThrowable{message}</b> which will print the message, which the exception contains.
+                    </p>
+                </td>
+            </tr>
+            <tr>
               <td align="center">
                 <b>d</b>{pattern}<br />
                 <b>date</b>{pattern}
