java e.getmessage为空_【java】Execption的 e.getMessage()为null的解决方法

================================

场景:

当代码出现异常时通常都需要将异常信息写入到日志中,异常信息越详细越有利于问题的排查。而通过的Exception.getMessage()方法只能获得异常的名称而不能获取哪里出现的异常,对于排错意义不大。

甚至有时候,getMessage()返回的是null。

查看getMessage()的源码:

/*** Returns the detail message string of this throwable.

*

*@returnthe detail message string of this {@codeThrowable} instance

* (which may be {@codenull}).*/

publicString getMessage() {returndetailMessage;

}

可以看到说明,与可能返回为null。

解决方法:

罗列四个解决方法

//1、

publicString getTrace(Throwable t) {

StringWriter stringWriter= newStringWriter();

PrintWriter writer= newPrintWriter(stringWriter);

t.printStackTrace(writer);

StringBuffer buffer=stringWriter.getBuffer();returnbuffer.toString();

}//2、

public staticString getExceptionAllinformation(Exception ex){

String sOut= "";

StackTraceElement[] trace=ex.getStackTrace();for(StackTraceElement s : trace) {

sOut+= "\tat " + s + "\r\n";

}returnsOut;

}//3、

public staticString getExceptionAllinformation_01(Exception ex) {

ByteArrayOutputStream out= newByteArrayOutputStream();

PrintStream pout= newPrintStream(out);

ex.printStackTrace(pout);

String ret= newString(out.toByteArray());

pout.close();try{

out.close();

}catch(Exception e) {

}returnret;

}//4、

private staticString toString_02(Throwable e){

StringWriter sw= newStringWriter();

PrintWriter pw= new PrintWriter(sw, true);

e.printStackTrace(pw);

pw.flush();

sw.flush();returnsw.toString();

}

具体使用场景:

try{

.....

}catch(Exception e){

StringWriter stringWriter= newStringWriter();

PrintWriter writer= newPrintWriter(stringWriter);

e.printStackTrace(writer);

StringBuffer buffer=stringWriter.getBuffer();

String errMsg=buffer.toString();

logger.error(errMsg);

hashMap.put("status",String.valueOf(-1));

hashMap.put("errorMsg",StringUtils.isBlank(errMsg) ? "": errMsg);

}finally{

redisUtil.HASH.hmset(recordKey,hashMap);

String lpop=redisUtil.LISTS.lpop(runTaskKey);

System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>任务执行完成,执行队列"+runTaskKey+"移除:"+lpop);

hashMap.clear();

}

参考地址:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值