e.printStackTrace()在日志中输出

通常e.getMessage()并不能获取全部的错误信息,需要用到e.printStackTrace()查看完整错误信息,但是这个方法是void 只能在控制台输出。

介绍两种方法,其实logger已经帮我做了这个事情

一、

log.error("系统异常:",e);

一个直接通过log打印出来,这个方法是最简便的

二、

/**
     * 获取e.printStackTrace() 的具体信息,赋值给String 变量,并返回
     * 
     * @param e
     *            Exception
     * @return e.printStackTrace() 中 的信息
     */
    public static String getStackTraceInfo(Exception e) {
        StringWriter sw = null;
        PrintWriter pw = null;
        try {
            sw = new StringWriter();
            pw = new PrintWriter(sw);
            e.printStackTrace(pw);//将出错的栈信息输出到printWriter中
            pw.flush();
            sw.flush();
            return sw.toString();
        } catch (Exception ex) {
            return "printStackTrace()转换错误";
        } finally {
            if (sw != null) {
                try {
                    sw.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            if (pw != null) {
                pw.close();
            }
        }

    }

另一个通过工具类转换成字符串,转成字符串了想咋输出就咋输出

另外e.printStackTrace()要尽量少用,可能会导致锁死

详见

java中e.printStackTrace()不要使用,请使用logger记录

工具类引用

java 获取e.printStackTrace() 的具体信息,赋值给String 变量 并返回

你可能感兴趣的:(javaSE)