南昌Java培训
达内南昌中心

0791-88193285

热门课程

达内:Java打印完整的堆栈信息的方法

  • 时间:2015-12-22
  • 发布:南昌java培训
  • 来源:PHPERZ


    南昌达内Java培训专家介绍Java打印完整的堆栈信息的方法:

    我们在编写一些组件时,使用的日志系统有时并不能打印完整的堆栈信息,比如slf4j,log4j,我们在调用log.error("found error ...",e)打印异常时,只打印一行异常信息。下面是slf4j的源码

 /**
   * Log an exception (throwable) at the ERROR level with an
   * accompanying message.
   *
   * @param msg the message accompanying the exception
   * @param t   the exception (throwable) to log
   */
  public void error(String msg, Throwable t);

    这段代码在打印exception时,只是打印了堆栈当中的第一行Throwable的信息, 而我们想要把整个堆栈都打印出来,可以用下面方式打印堆栈信息。

 e.printStackTrace()

    这虽然打印了完整的堆栈信息,但它并不会把堆栈信息定向到日志文件中,这时我们就需要利用输出流把信息重新定到变量中,然后再送入到日志系统中

/**
     * 完整的堆栈信息
     *
     * @param e Exception
     * @return Full StackTrace
     */
    public static String getStackTrace(Exception e) {
        StringWriter sw = null;
        PrintWriter pw = null;
        try {
            sw = new StringWriter();
            pw = new PrintWriter(sw);
            e.printStackTrace(pw);
            pw.flush();
            sw.flush();
        } finally {
            if (sw != null) {
                try {
                    sw.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            if (pw != null) {
                pw.close();
            }
        }
        return sw.toString();
    }

    然后再如此调用就解决了这个问题

log.error("fount error...", getStackTrace(e))


上一篇:达内:Java泛型之类型擦除的知识
下一篇:达内:Java8中compose和andThen实现函数组合

恭喜达内获得《产学合作协同育人项目合作伙伴奖》

达内Java大数据捷报频传,最高薪资15000元

中传学子参加达内Java培训,转身成为Java工程师月薪12.5K

本科生求职难参加达内Java培训,获11K高薪入职上海睿民

选择城市和中心
贵州省

广西省

海南省