首页 > 编程语言 >java 捕获异常Exception 获取异常信息的方法 e.toString() e.getMessage() e.printStackTrace()

java 捕获异常Exception 获取异常信息的方法 e.toString() e.getMessage() e.printStackTrace()

时间:2023-12-04 11:37:33浏览次数:36  
标签:Exception java printStackTrace getMessage toString ex logger 异常

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);

 

标签:Exception,java,printStackTrace,getMessage,toString,ex,logger,异常
From: https://www.cnblogs.com/hailexuexi/p/17874532.html

相关文章

  • JavaWeb实现文件上传和下载
    环境配置:导入依赖jar包。commons-fileupload-1.4.jarcommons-io-2.6.jar上传表单的enctype属性enctype属性规定在发送到服务器之前应该如何对表单数据进行编码。语法<formenctype="value">1属性值值 描述application/x-www-form-urlencoded 在发送前编码所有字符(默认)multipart/......
  • 1.Java集合(List、Set、Queue)
    1.集合概述Java集合也被称为容器。主要由两个接口组成,一个是Collection接口,主要存放单一元素;一个是Map接口,主要存放键值对。Collection下面还有三个子接口,分别是List、Set、Queue。Java框架如下图所示:1.1List、Set、Queue、Map简介List(对付顺序的好帮手):存储的元素有序、......
  • java对象中属性太多,需要对一些属性的值做计算操作
    问题描述:在java中,如果一个对象属性太多,我们需要对一个对象中的全部属性进行取相反值解决方法:在类中定义一个函数如下:我这边对象的属性类型都是BigDecimal类型的publicvoidsetNegateValue()throwsIllegalAccessException{Field[]declaredFields=this.getClass......
  • Java 控制语句:分支与循环
    第一章:分支结构1.1条件语句1、if语句2、switchcase语句switch(expression){casevalue://语句break;//可选casevalue://语句break;//可选//你可以有任意数量的case语句default://可选//语句}如果c......
  • java基础-变量、常量、作用域
    变量变量:指可以变化的量Java是一种强类型预言,每个变量都必须声明其类型Java变量是程序中最基本的储蓄单元,其要素包括变量名,变量类型和作用域。typevarName[=value][{,varName[=value]}];//数据类型变量名=值;可以使用都好隔开来声明多个同类型变量注意事项1.每个......
  • LeetCode-Java:121. 买卖股票的最佳时机
    题目给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。你只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,......
  • LeetCode-Java:122. 买卖股票的最佳时机Ⅱ
    题目给你一个整数数组prices,其中prices[i]表示某支股票第i天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候最多只能持有一股股票。你也可以先购买,然后在同一天出售。返回你能获得的最大利润。示例1:输入:prices=[7,1,5,3,6,4]输出:7解释......
  • R语言Outliers异常值检测方法比较|附代码数据
    原文链接:http://tecdat.cn/?p=8502原文出处:拓端数据部落公众号最近我们被客户要求撰写关于异常值检测的研究报告,包括一些图形和统计输出。识别异常值的方法有很多种,R中有很多不同的方法。 关于异常值方法的文章结合了理论和实践。理论一切都很好,但异常值是异常值,因为它们不遵......
  • Java基础-数据类型
    目录注释写代码时,书写注释是一个非常好的习惯。平时写代码一定要注意规范选中代码,shift+ctrl+/搞定。标识符java所有的组成部分都需要名字,类名,变量名以及方法名被称为标识符。所有的标识符都是以字母,美元符,或者下划线开始的。数据类型1.强类型语言:要求变量的使用要严......
  • 后端 Java 对象转 json(不用第三方依赖的拼接方式)
    需求:编写工具类要尽可能不用任意一个jar包依赖,或者尽可能精简原有数据:ArpsParams{actualProduction=[{mouth=2022-07,oilProdDaily=366088.33},{mouth=2022-08,oilProdDaily=380806.78}],predictionSegment=[{mouth=2022-07,oilProdDaily=367832.31},{mouth=2022-0......