背景

在开发Java应用程序的时候,遇到程序抛异常,我们通常会把抛异常时的运行时环境保存下来(写到日志文件或者在控制台中打印出来)。这样方便后续定位问题。

需要记录的运行时环境包含两部分内容:抛异常时的参数信息和函数调用堆栈。针对堆栈信息,如果直接调用Exception的getStackTrace方法获取将得到这样一句没用的信息:

[Ljava.lang.StackTraceElement;@4361bd48

我们希望能打印完整的调用堆栈,像这样:

com.elon.FileNoExistException at com.elon.StaruptService.throwException(StaruptService.java:21)

at com.elon.StaruptService.main(StaruptService.java:9)

方案

提供一个静态公有方法用于获取异常的堆栈信息。将堆栈作为异常信息的一部分输出到日志文件或者打印到控制台界面。

步骤一:创建一个Demo项目

步骤二:编写样例代码

1、获取异常堆栈的公共方法:

package com.elon;

import java.io.PrintWriter;

import java.io.StringWriter;

public class UtilTool

{

/**

* 获取异常的调用堆栈信息。

*

* @return 调用堆栈

*/

public static String toStackTrace(Exception e)

{

StringWriter sw = new StringWriter();

PrintWriter pw = new PrintWriter(sw);

try

{

e.printStackTrace(pw);

return sw.toString();

}

catch(Exception e1)

{

return "";

}

}

}

2、增加一个判断文件不存在时抛出的异常:

package com.elon;

/**

* 自定义的文件不存在异常。

*

* @author elon

*/

public class FileNoExistException extends Exception

{

private static final long serialVersionUID = 7929453457697405891L;

/**

* 文件完整路径

*/

private String filePath;

/**

* 构造函数。初始化文件路径。

*

* @param filePath 文件路径

*/

public FileNoExistException(String filePath)

{

this.filePath = filePath;

}

public String getExceptionMsg()

{

return "filePath:" + filePath + "|exception trace:" + UtilTool.toStackTrace(this);

}

}

3、打印异常信息:

public class StaruptService

{

public static void main(String[] args)

{

try

{

FileNoExistException e = throwException();

}

catch (FileNoExistException e)

{

System.out.println(e.getExceptionMsg());

}

}

private static FileNoExistException throwException() throws FileNoExistException

{

throw new FileNoExistException("D:/123.xlsx");

}

}

测试打印结果

filePath:D:/123.xlsx|exception trace:com.elon.FileNoExistException at com.elon.StaruptService.throwException(StaruptService.java:19)

at com.elon.StaruptService.main(StaruptService.java:9)

java 异常堆栈输出_打印Java异常堆栈信息相关推荐

  1. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  2. java try catch嵌套_解析Java中未被捕获的异常以及try语句的嵌套使用

    Java未被捕获的异常 在你学习在程序中处理异常之前,看一看如果你不处理它们会有什么情况发生是很有好处的.下面的小程序包括一个故意导致被零除错误的表达式. class Exc0 { public st ...

  3. java提供两种处理异常的机制_浅析Java异常处理机制

    关于异常处理的文章已有相当的篇幅,本文简单总结了Java的异常处理机制,并结合代码分析了一些异常处理的最佳实践,对异常的性能开销进行了简单分析. 博客另一篇文章<[译]Java异常处理的最佳实践 ...

  4. 抛出运行时异常的目的_「JAVA」运行时异常、编译时异常、自定义异常,通过案例实践转译和异常链...

    Java基础之异常处理机制 什么是异常 从事Java开发的小伙伴对于"异常"应该不陌生,因为每天都会遇到不少异常,或捕获,或抛出.那究竟什么是异常?异常即非正常的,不同于平常.一般 ...

  5. java通讯链路异常报错_【Java】有了链路日志增强,排查Bug小意思啦!

    在工作中,相信大家最怕的一件事就是听到有人在工作群艾特你:某某功能报错啦... 然后你就得屁颠屁颠的去服务器看日志,日志量少还好点,多的话找起来太麻烦了.不太容易直接定位到关键地方. 东找找西找找,好 ...

  6. java 异常 最佳实践_关于JAVA异常处理的20个最佳实践

    在我们深入了解异常处理最佳实践的深层概念之前,让我们从一个最重要的概念开始,那就是理解在JAVA中有三种一般类型的可抛类: 检查性异常(checked exceptions).非检查性异常(unche ...

  7. java 异常 最佳实践_处理Java异常的10种最佳实践

    java 异常 最佳实践 在本文中,我们将看到处理Java异常的最佳实践. 用Java处理异常不是一件容易的事,因为新手很难理解,甚至专业的开发人员也可能浪费时间讨论应该抛出或处理哪些Java异常. ...

  8. java异常断点数组_使用IDEA异常断点来定位java.lang.ArrayStoreException的问题

    前言 最近对 base-spring-boot项目进行了升级.在将其用于应用开发中时遇到java.lang.ArrayStoreException的异常导致程序无法启动.平常开发过程中面对这种描述不够 ...

  9. java打印对象头信息_打印Java对象头

    打印Java对象头 对象头形式 JVM中对象头的方式有以下两种(以32位JVM为例)普通对象|----------------------------------------------------- ...

最新文章

  1. Compression Helper Class using SharpZipLib
  2. 澳洲服务器拳头账号怎么注册,lol手游东南亚服拳头账号注册教程 东南亚服怎么注册拳头账号[多图]...
  3. python免安装版_web.py入门01——python安装
  4. discuz3.1用哪个版本php版本好,Discuz应用中心安装模板提示版本号不匹配适用于X3.3 X3.2 X3.1的解决方法...
  5. C#学习笔记-数据的传递(公共变量)以及Dictionary
  6. (十四)函数参数和返回值
  7. Android:Eclipse+ADT+Android SDK 搭建安卓开发环境
  8. 人工智能学习(二)安装tensorflow与pytorch
  9. 再谈“颠覆”冯.诺依曼计算机体系结构 —— 计算机的未来发展方向:去内存化...
  10. matlab皮尔逊和斯皮尔曼,利用matlab计算Pearson和Spearman相关系数
  11. 金蝶专业版怎么反过账当月_金蝶KIS专业版没有反过账功能,怎么反过账
  12. 网易邮箱异常信息说明
  13. OP-TEE中的线程管理(一)
  14. FusionAccess模板制作并发放
  15. 介绍篇 决策引擎环节
  16. php源码 拼车网顺风车_最新拼车网PHP源码整站打包—微信拼车+手机拼车+微信双终端+数据同步...
  17. hdu 2072 单词数(C语言)
  18. 2021会是怎样的一年
  19. 遇到Process finished with exit code -1073740791 (0xC0000409)实在不能解决的时候要注意
  20. 购物车原生js简单明了

热门文章

  1. 容器学习 之 自定义容器网络(十三)
  2. 容器源码分析之TreeSet(五)
  3. Effective Java之避免创建不必要的对象(五)
  4. 图文并茂的讲解 ICMP (网际控制报文)协议
  5. leetcode--130. 被围绕的区域
  6. 【注意点分析】1016 Phone Bills (25 分)
  7. 【最优解法】1030 完美数列 (25分)_23行代码AC
  8. 【最详细】数据结构(C语言版 第2版)第六章课后习题答案 严蔚敏 等 编著
  9. [leetcode] 21.合并两个有序链表
  10. 传统公司部署OpenStack(t版)简易介绍(一)——环境部署