java异常解析

异常很常见,当抛出异常时,如果不能锁定问题出在哪,是令人非常头疼的问题,那么如果知道抛出的异常整个堆栈的详细信息,然后进一步的去分析会不会找到原因所在呢,在这里提供一个方式去打印出异常堆栈信息

ByteArrayOutputStream baos = new ByteArrayOutputStream();
e.printStackTrace(new PrintStream(baos));
String exception = baos.toString();
LogUtil.e("exception= "+exception);

其实解释起来很简单,说白了就是用文件流,等同于把e.printStackTrace()的内容打印到一个文件中,然后再把内容付给一个字符串,最后就可以把logger.error(exception)把错误内容打印到日志上了。

奉上实测图,交代一下背景:把图片上传到华为云,有的用户上传失败了,问题出在哪里不能够确认,这时借助异常的详细信息内容来确认问题就比较重要了。

exception= com.obs.services.exception.ObsException: Error message:OBS Error Message.OBS servcie Error Message. -- ResponseCode: 403, ResponseStatus: Forbidden, XML Error Message: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><Error><Code>RequestTimeTooSkewed</Code><Message>The difference between the request time and the current time is too large.</Message><RequestId>10140000016730228BD5A775974AF6EC</RequestId><HostId>bb+U00D9WhC7Md7RxtnAB+4DilL7bI9I/Ym6thmXcnpIjyS9bo6OfXFkIVnTClGA</HostId><MaxAllowedSkewMilliseconds>900000</MaxAllowedSkewMilliseconds><RequestTime>Mon, 19 Nov 2018 08:00:29 GMT+00:00</RequestTime><ServerTime>2018-11-20T08:00:29.653Z</ServerTime></Error>
                                                               at com.obs.services.internal.utils.ConvertUtil.changeFromS3Exception(ConvertUtil.java:584)
                                                               at com.obs.services.ObsClient.doActionWithResult(ObsClient.java:7306)
                                                               at com.obs.services.ObsClient.getBucketStorageInfo(ObsClient.java:2409)
                                                               at com.foton.repair.util.HuaWeiObjectStorageUtil.simpleUpload(HuaWeiObjectStorageUtil.java:157)
                                                               at com.foton.repair.util.HuaWeiObjectStorageUtil.startUploadMedia(HuaWeiObjectStorageUtil.java:91)
                                                               at com.foton.repair.util.HuaWeiObjectStorageUtil$1.onBackground(HuaWeiObjectStorageUtil.java:123)
                                                               at com.foton.repair.task.DispatchTask.doOnBackgroundListener(DispatchTask.java:174)
                                                               at com.foton.repair.task.DispatchTask.doInBackground(DispatchTask.java:80)
                                                               at com.foton.repair.task.DispatchTask.doInBackground(DispatchTask.java:29)
                                                               at com.foton.repair.task.BaseTask$2.call(BaseTask.java:203)
                                                               at java.util.concurrent.FutureTask.run(FutureTask.java:266)
                                                               at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
                                                               at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
                                                               at java.lang.Thread.run(Thread.java:764)

从中分析就可以知道,是用户手机的当前时间和华为云的当前时间不一致造成的,问题也就确认了。

遇到此类问题的同学可以试一下。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值