java,异常详细打印问题

非技术专家群体 发布于 2016/06/21 17:55
阅读 707
收藏 0
//service层代码
String ids = params.get("id");
String[] idsArray = ids.split(",");
//Controller
try {
   return xxxService.xxxx(request);
} catch (Exception e) {
	LOG.error(e);
}



service ids 为空时 出现空指针异常.日志文件里面只输出了异常类型,没有明细。请教大神们怎么输出详细的异常信息

17:38:36.223 [http-8080-1] ERROR com.xxx.xxx.xx.BaseController - java.lang.NullPointerException

加载中
2
_kolnick
_kolnick

StackTraceElement[] stackTrace = e.getStackTrace();

if(stackTrace!=null)

{

for(StackTraceElement element :stackTrace)

{

element.getClassName();

element.getFileName();

element.getMethodName();

element.getLineNumber();

  }

}

1
小米米儿小
小米米儿小

1、出现这种问题的情况是代码不严谨,或者是在开发阶段一般就暴露出来了。比如你这里ids如果可能为空,你应该先判断不为空后再split。xxxService为空,你开发阶段就能暴露。

2、行号一般能定位问题。

3、如果是同一行代码两个对象都可能报空指针。看第一条。

所以我觉得你也没必要纠结如何输出这类详细异常信息。

1
zheng_pat
zheng_pat
 StringWriter sw = new StringWriter();
 PrintWriter pw = new PrintWriter(sw); 
e.printStackTrace(pw); 
System.out.println(sw.toString().toUpperCase());
0
ZeRur_
ZeRur_
void error(String var1); 
void error(String var1, Object var2); 
void error(String var1, Object var2, Object var3); 
void error(String var1, Object... var2); 
void error(String var1, Throwable var2);

你这种写法走的是error方法的第一个重载版本 你需要使用最后一个重载版本

0
李景枫
李景枫
很明显null.split()是有问题的,所以你得再使用split函数之前,判断ids是否为空,为空则直接返回,不再调用split函数即可
0
艾伦果果
艾伦果果

StringUtils.isNotBlank(ids) {

String[] idsArray = ids.split(",");
//Controller
try{
   returnxxxService.xxxx(request);
}catch(Exception e) {
    LOG.error(e);
}

}

梦天126
菜鸟学习了
0
败家老头☞起个网名真难
败家老头☞起个网名真难
‍加一个空指针判断。
0
败家老头☞起个网名真难
败家老头☞起个网名真难
‍用石头这个就可以的:smile:
返回顶部
顶部