您的位置:首页 > 其它

把e.printStackTrace的堆栈信息打印在log.error()中

2016-12-29 16:48 337 查看
大家都知道,网站在运行的过程中,打印必要的log对记录网站的运行情况、从而分析程序问题是很重要的。在Java工程里面配置好log4j之后就可以进行log记录了。

log分为几个级别:error、info、debug、fatal,应根据网站的具体情况,配置合适的level。

例子:

log.error("libzone.cn exception:链接数据库出错")

log.info("libzone.cn exception:链接数据库出错")

log.debug("libzone.cn exception:链接数据库出错")

log.fatal("libzone.cn exception:链接数据库出错")。

有时候,我们有必要把出错时候的异常信息打印进log里面,例子:

        }catch (Exception e){

            e.printStackTrace();

            log.error("libzone.cn exception:" + e);

            //log.info("libzone.cn exception:" + e);

            //log.debug("libzone.cn exception:" + e);

            //log.fatal("libzone.cn exception:" + e);

        }

以这种方式,指的是以"libzone.cn exception:" + e这种方式打印异常的时候,只会打印一个异常的概要信息,例子如下:

libzone.cn exception:com.BusinessException: java.lang.NullPointerException

有时候,这样的一个概要性的异常信息对于分析问题帮助不大,有可能我们想把异常的堆栈具体信息打印在log里面,那怎么在log.error()里面把e.printStackTrace的堆栈具体信息打印出来呢?这时候我们要以log.XXX(Object obj,Thowable e)这种方式,也就是要将异常对象作为第二个参数传递到log的方法中。例子如下:

       }catch (Exception e){

            e.printStackTrace();

            log.error("libzone.cn exception:", e);

            //log.info("libzone.cn exception:", e);

            //log.debug("libzone.cn exception:", e);

            //log.fatal("libzone.cn exception:", e);

        }

这样,我们就可以在log日志里面看到类似于控制台(console)里面那样的异常详细信息了。

如果全部把异常详细打印出来,有可能造成日志文件会很大;打印概要信息,可能对分析问题帮助不大。应根据自己的实际情况,选择合适的方式

是这样的,如果获取了异常,把异常作为最后一个参数打出来,那么可以打出异常的stack,否则不行。也就是说
try{
.......
}
catch(Exceptoin e){
log.error("运行异常",e);  //可以获取异常的stack
log.error("运行异常");   // 只能获取运行异常几个字
log.error(e);                  //会调用e的toString方法,可以获取异常的Message,但没有stack
log.error(e.getMessage);//可以得到异常的message ,没有stack
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: