JAVA log4j 正确的异常处理和日志记录

问题描述 投票:0回答:1

由于某种原因,我丢失了部分堆栈跟踪,即异常的实际根源。

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);
    }
}

有人知道为什么我丢失了发生第一个异常的堆栈跟踪部分的原因吗?您能建议一种处理/记录异常的正确方法吗?

java logging exception log4j
1个回答
1
投票
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期间出错

© www.soinside.com 2019 - 2024. All rights reserved.