【温情提醒】工作中要少用e.printStackTrace()的致命原因之一

工作中多用专门的日志对象打印日志

先摆结论

e.printStackTrace()System.out.print() 一样是不会把信息输出到日志文件的。

解决措施

使用 log.error(e.getMessage(),e); 将错误信息通过日志对象输出到日志文件。

事情起因

工作中接手了一个lan摊子的需求,发生了一个bug,我从服务器上拿到了一份日志文件,迅速定位到了程序执行的那几行,有一个流程没走完就跳过去了。
我当时想如果没有异常应该会执行的呀,
为什么没有执行?
难道是发生了异常?
不对呀,
程序有写e.printStackTrace()打印异常信息呀,日志文件里没有异常呀!!!

} catch(Exception e){
    
    
	e.printStackTrace();
} finally{
    
    
	log.info("step last!!!")
}
log.info("step outer 3!!!")

我立马回了测试人员一句“幽灵代码”!!!
折腾了好久,发现这个e.printStackTrace()越看越不顺眼;
可是,我个1年经验的小白怎么敢质疑3年经验程序员写的代码呢?
躲在角落怀疑人生。
后来终于扛不住了,测试催的紧,
于是我发起了第一个质疑“e.printStackTrace()一定有问题”,
上网一搜,发现还真是。
e.printStackTrace()不会把错误输出到日志文件中。于是后面就好办了。
无fuck可说!!!

补充

①服务器一般是没有console的,所以都采用日志文件的形式收集打印的日志信息。
②e.printStackTrace()会把信息打印在console和单独设置的console日志文件中,一般的公司是没有设置console文件的。都是采用像Log4J这样的专门做日志输出的第三方对象来输出日志文件。所以打印在console里的操作是不会打印到日志文件里的。大家也可以举一反三列出其他操作。
③在本地的程序中可以使用e.printStackTrace()或者System.out.print()操作来打印日志方便打印信息,对于不会单步debug的同学是必不可少的操作。但是,工作中我们应该尽量使用专门的Log对象打印日志信息。

猜你喜欢

转载自blog.csdn.net/liangcheng0523/article/details/107685646