java 捕获异常Exception 获取异常信息的方法 e.toString() e.getMessage() e.printStackTrace()
Java 异常中 e.getMessage() 和 e.toString() 和 e.printStackTrace()的区别
e.getMessage(): 打印 异常的原因
e.toString(): 打印 异常类型 和 异常的原因
e.printStackTrace(): 打印完整的异常堆栈信息
总结
e.getMessage() 和 e.toString() 方法: 打印的异常信息太少,没有具体的堆栈信息,不利于问题的定位处理!有时还会输出为 null 。头疼
e.printStackTrace :都可以打印完整的异常堆栈信息; 但 e.printStackTrace() 在遇到大量并发访问 且 出现异常时,会发生:内存被占满的情况,导致服务挂掉,不可用。
但项目实践中,是需要输出详细的错误,来判断问题出在哪里。
使用 org.slf4j.Logger 的 log.error() 多参数方法,来解决这个问题。
正确的记录错误异常日志的方法,应为:
log.error("发生错误! ", e.getMessage(), e);
以http请求为例,写下捕获异常的方法
使用多个 catch 来更好的定位 出错点
logger.debug("httpPost() 准备HttpPost请求! " + url + " " + ""); String result ="-1"; try { CloseableHttpClient httpclient = HttpClients.createDefault(); HttpGet httpget = new HttpGet("https://www.example.com"); CloseableHttpResponse response = httpclient.execute(httpget); try { HttpEntity entity = response.getEntity(); result = EntityUtils.toString(entity); EntityUtils.consume(entity); System.out.println(result); } finally { response.close(); } }catch (ClientProtocolException ex){ logger.error("httpGet() 请求失败 ClientProtocolException " + url + " ",ex.getMessage(),ex); }catch (IOException ex){ logger.error("httpGet() 请求失败 IOException " + url + " ",ex.getMessage(),ex); }catch (Exception ex){ logger.error("httpGet() 请求失败 Exception " + url + " ",ex.getMessage(),ex); } logger.debug("httpGet() 请求结果: " + result + " " + url);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2013-12-04 c#+mysql 中文乱码
2012-12-04 gb2312和utf8 转换