打印异常栈

  1. 调用无参数的Throwable.printStackTrace()方法,我们看下这个方法的实现:
    public void printStackTrace() {
        printStackTrace(System.err);
    }

printStackTrace()方法将异常栈输出到标准错误流中,但有些环境不支持标准错误流或者我们希望以统一的方式输出日志时候,这时候这种方式不是最好的选择。在生产环境中推荐使用第二和第三种方法。

  1. 使用guava中的Throwables.getStackTraceAsString(Throwable throwable)方法
  public static String getStackTraceAsString(Throwable throwable) {
    StringWriter stringWriter = new StringWriter();
    throwable.printStackTrace(new PrintWriter(stringWriter));
    return stringWriter.toString();
  }

该工具方法对标准库作了一层封装,将异常栈转换成字符流。

  1. 如果不希望引入guava依赖,则可以实现自己的工具方法。以作者自己的日志工具类为例:
/**
 *
 * All rights reserved.
 * Created by zzhan on 2017/3/31 20:00.
 */
public class LogHelper {

    /**
     * 打印异常栈日志
     * @param logger
     * @param throwable
     */
    public static void logStackTrace(Logger logger, Throwable throwable) {
        logger.error(getStackTraceAsString(throwable));
    }

    /**
     * 转换异常栈
     * @param throwable
     * @return
     */
    public static String getStackTraceAsString(Throwable throwable) {
        StringWriter writer = new StringWriter();
        throwable.printStackTrace(new PrintWriter(writer));
        return writer.toString();
    }
}

注:这个工具类在我自己的springboot示例中也使用到,一个主要的用途是记录全局异常处理器中的错误信息。

你可能感兴趣的:(打印异常栈)