/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements. See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache license, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the license for the specific language governing permissions and
 * limitations under the license.
 */
package org.apache.logging.log4j.core.helpers;

import java.io.IOException;
import java.io.InterruptedIOException;
import java.io.LineNumberReader;
import java.io.PrintWriter;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;

/**
 * Helps with Throwable objects.
 */
public class Throwables {

    /**
     * Converts a Throwable into a List of Strings
     * 
     * @param throwable
     *            the Throwable
     * @return a List of Strings
     */
    public static List<String> toStringList(final Throwable throwable) {
        final StringWriter sw = new StringWriter();
        final PrintWriter pw = new PrintWriter(sw);
        try {
            throwable.printStackTrace(pw);
        } catch (final RuntimeException ex) {
            // Ignore any exceptions.
        }
        pw.flush();
        final LineNumberReader reader = new LineNumberReader(new StringReader(sw.toString()));
        final ArrayList<String> lines = new ArrayList<String>();
        try {
            String line = reader.readLine();
            while (line != null) {
                lines.add(line);
                line = reader.readLine();
            }
        } catch (final IOException ex) {
            if (ex instanceof InterruptedIOException) {
                Thread.currentThread().interrupt();
            }
            lines.add(ex.toString());
        }
        return lines;
    }

}

@@ -1128,16 +1128,22 @@
 %0Apublic 
+final 
 class Th
@@ -1154,16 +1154,50 @@
 bles %7B%0A%0A
+    private Throwables() %7B%0A    %7D%0A%0A
     /**%0A
@@ -1224,16 +1224,28 @@
 rowable 
+stack trace 
 into a L
@@ -1265,17 +1265,16 @@
 s%0A     *
- 
 %0A     * 
@@ -1707,24 +1707,84 @@
 pw.flush();%0A
+        final List%3CString%3E lines = new ArrayList%3CString%3E();%0A
         fina
@@ -1870,73 +1870,8 @@
 ));%0A
-        final ArrayList%3CString%3E lines = new ArrayList%3CString%3E();%0A
     
@@ -2246,24 +2246,84 @@
 oString());%0A
+        %7D finally %7B%0A            Closer.closeSilent(reader);%0A
         %7D%0A  

Make this a utility class.