/*
 * 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.util;

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.
/** * Helps with Throwable objects. */
public final class Throwables { private Throwables() { }
Returns the deepest cause of the given throwable.
Params:
  • throwable – the throwable to navigate
Returns:the deepest throwable or the given throwable
/** * Returns the deepest cause of the given {@code throwable}. * * @param throwable the throwable to navigate * @return the deepest throwable or the given throwable */
public static Throwable getRootCause(final Throwable throwable) { Throwable cause; Throwable root = throwable; while ((cause = root.getCause()) != null) { root = cause; } return root; }
Converts a Throwable stack trace into a List of Strings.
Params:
  • throwable – the Throwable
Returns:a List of Strings
/** * Converts a Throwable stack trace 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 List<String> lines = new ArrayList<>(); final LineNumberReader reader = new LineNumberReader(new StringReader(sw.toString())); 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()); } finally { Closer.closeSilently(reader); } return lines; }
Rethrows a Throwable.
Params:
  • t – the Throwable to throw.
Since:2.1
/** * Rethrows a {@link Throwable}. * * @param t the Throwable to throw. * @since 2.1 */
public static void rethrow(final Throwable t) { Throwables.<RuntimeException>rethrow0(t); } @SuppressWarnings("unchecked") private static <T extends Throwable> void rethrow0(final Throwable t) throws T { throw (T) t; } }