由于某种原因,我丢失了部分堆栈跟踪,即异常的实际根源。
public void method1(){
try{
method2();
}
catch(SearchException e){
logger.error("Search error", e.getMessage(), e);
}
}
private void method2(){
try{
//Logic which potentially can throw exception
....
....
}
catch(Exception e){
throw new SearchException("Error during execution Module A", e);
}
}
public class SearchException extends Exception{
public SearchException(String message, Throwable cause) {
super(message, cause);
}
}
有人知道为什么我丢失了发生第一个异常的堆栈跟踪部分的原因吗?您能建议一种处理/记录异常的正确方法吗?
super(message, cause);
message
将是 detailMessage
班级的 Throwable
。并且它将在toString
方法中使用,并且源原因(异常)将被忽略。
358 public String toString() {
359 String s = getClass().getName();// class Name
360 String message = getLocalizedMessage();// detailMessage
361 return (message != null) ? (s + ": " + message) : s;
362 }
您可以在自定义
Exception
类中重写 toString 方法。
class SearchException extends Exception{
String str=null;
public SearchException(String str,Throwable th){
super( th);
this.str=str;
}
public String toString(){
return super.toString() +" - "+ str;
}
}
此定制表格将打印 -
搜索错误 -----java.lang.NullPointerException--------SearchException:java.lang.NullPointerException - 执行模块A期间出错