2015-09-27 152 views
2

我定義了一個自定義異常,像這樣:如何在自定義異常中打印堆棧跟蹤?

package source.exception; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

public class ValidationException extends Exception 
{ 
    private static final Logger logger = LoggerFactory.getLogger("source.exception.ValidationException"); 

    public ValidationException(String message) 
    { 
     super(message); 
     ValidationException e = new ValidationException(); 
     logger.error("Exception : {}" , e); 
    } 
} 

在我使用這個例外,像這樣的主程序:

public void readFile(String path) throws ValidationException 
    { 
     logger.debug("Input file path = {}" , path); 
     try 
     { 
      if(validatePath(path)) 
      { 
       mathExpressionReader = new BufferedReader(new FileReader(path)); 
      } 
      else 
      { 
       throw new ValidationException("Your file dose not exist!"); 
      } 
     } 
     catch(Exception ex) 
     { 
      logger.error("Exception {} has occurred" , ex); 
     } 
    } 

現在我不知道如何打印堆棧跟蹤時validatePath失敗(意味着如果語句變爲false)。任何人都可以幫助我在自定義異常中打印堆棧跟蹤?

+0

'ValidationException e = new ValidationException(); logger.error(「Exception:{}」,e);' - 這意味着什麼? – immibis

+0

@ immibis yes.but當我在ValidationException類中定義這個陳述給我一個錯誤。在readFile()方法中,如果validate Path是false,我想停止運行,然後用logback在文件中打印棧tarce – marzie

+0

爲什麼要登錄異常構造函數?也許你的意思是'logger.error(「Error」,this)'? –

回答

3

爲什麼不只是使用e.printStackTrace()

public class ValidationException extends Exception 
{ 
    public ValidationException(String message) 
    { 
     super(message); 
    } 
} 

public void readFile(String path) throws ValidationException 
{ 
    logger.debug("Input file path = {}" , path); 
    try 
    { 
     if(validatePath(path)) 
     { 
      mathExpressionReader = new BufferedReader(new FileReader(path)); 
     } 
     else 
     { 
      throw new ValidationException("Your file dose not exist!"); 
     } 
    } catch (ValidationException e) { 
     // This will print the stack trace. 
     e.printStackTrace(); 
    } 
} 
+0

我在哪裏使用try塊?在readFile()方法中?我是java中的新成員。 – marzie

+0

請參閱您的readFile()中的編輯。 –