打印异常栈

  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示例中也使用到,一个主要的用途是记录全局异常处理器中的错误信息。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,142评论 0 62
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,765评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • 一、Android Crash说明 程序因未捕获的异常而突然终止, 系统会调用处理程序的接口UncaughtExc...
    Mur阅读 3,068评论 0 6
  • Django 用户认证系统处理用户帐号,组,权限以及基于cookie的用户会话。 这个系统一般被称为 auth/a...
    syp_xp阅读 759评论 0 1