e.fillInStackTrace()你用对了吗?
2023-06-13 09:15:36 时间
e.fillInStackTrace()的功能及适用场景
功能
e.fillInStackTrace()每次执行的时候,会清空原来异常跟踪栈内的trace信息。 然后以当前的调用位置做为代码第一次出错的位置来重新建立trace信息。
适用场景
造成异常的原因确定或不关注报错的细节,在排查问题时不需要知道是哪行代码出错了。 譬如,Http客户端的报错。在调用第三方API时,Http客户端从服务器读取数据时超时。 这种异常根据错误的message就可以确定异常原因
不适用场景
造成异常的原因很多,不容易确定,在排查问题时需要知道是哪行代码出错了。 eg:
示例:在记录日志时,e与e.fillInStackTrace()的区别
场景1:try catch后打印异常e
业务代码:
测试代码:
执行结果:
场景2:try catch后打印异常e.fillInStackTrace()
业务代码:
测试代码:
执行结果:
https://gitee.com/baidumap/top-tree/tree/master/src/test/java/com/tree/thrive/business/log/service
JDK源码分析
java.lang.Throwable.fillInStackTrace()
"熬最狠的夜,养最贵的生"触发的思考: 某个时间段有突发事件,倒排期,时间不够,只能早起晚睡加班加点来完成。这种不是常态,只会偶发
出现常态化熬夜的一些猜测:
- 晚上比较安静,可以专心。的确,大家都按照几千年进化的生物钟,休息了,可以打扰你的人的确少了。夜深人静嘛。需要反思的点:为什么只有你"晚上才以专心"
- 增加了工作时间。别人睡了,我还在工作,工作时间比别人高,一步快步步快。如果仍然能按时起床且能保持精力旺盛的话,是这样的。恭喜,天生赢家,精力旺盛程度高于正常人,可用于做自己喜欢事的时间比正常人多。如果不是,就问下自己,每天处于清醒状态的时间真的增加了吗?
- 晚上多工作一会,会比较兴奋。"白天游门走四方,黑夜点灯补裤裆"? 白天疲劳晚上精神这是典型的神经衰弱,如无精神、无疲劳、记忆力减退、困倦、睡眠障碍等情况下,压力大、神经性问题可能过于紧张,不注意休息、不注意正常休息等。也有可能存在心理原因导致失眠,是植物神经调节紊乱,睡觉前喝一杯纯牛奶,增加锻炼,劳逸结合一定要制定纪律,生活中避免压力过大造成失眠。
"熬最狠的夜,养最贵的生"。 "熬"的狠了,小米粥一不小心熬成黑炭,想要养回来,需要有个白娘子,然后来了"白娘子盗仙草"才可以吧。
"阿尔伯特·爱因斯坦的一个经典实践:同一个思维层次解决不了同一个思维层次的问题,你不能用造成问题的思维方式解决问题。"
如果出现没有增加的熬夜,可以往以下维度上考虑考虑,发散一下,看看对解决问题有没有帮助:
- 找到工作重心。规划好工作,分清主次、轻重。
- 提升与岗位匹配的工作技能,
- 培养工作意识这个sense。最后:老板要的是成效,不是加班。如果是"战术上的勤奋,战略上的懒惰",越做越忙,越忙越做,不小心搞成"一将无能,累死三军"的委屈就不好了。