java 异常堆栈输出_打印Java异常堆栈信息

背景

在开发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项目

63e0c476aac910fe7711355dcc025c4c.png

步骤二:编写样例代码

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)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值