1、e.printStackTrace()打印在哪里
在catch中的e.printStackTrace()將打印到控制台
2、e.printStackTrace()打印的內容是什么
如下代碼:
import org.apache.logging.log4j.Logger; public class ExceptionTest { private static final Logger logger=LogManager.getLogger(); public void test() { try { int i=1/0; }catch(Exception e){ e.printStackTrace(); } } public static void main(String[] args) { ExceptionTest test= new ExceptionTest(); test.test(); } }
輸出結果如下:
java.lang.ArithmeticException: / by zero at myProject.ExceptionTest.test(ExceptionTest.java:10) at myProject.ExceptionTest.main(ExceptionTest.java:18)
可見,e.printStackTrace()打印了錯誤的具體信息,即這個錯誤出現的位置,便於查找錯誤源
3、如果將e.printStackTrace()的信息打印在日志里應該怎么做呢?
見如下代碼:
package myProject; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class ExceptionTest { private static final Logger logger=LogManager.getLogger(); public void test() { try { int i=1/0; }catch(Exception e){ logger.error(e); } } public static void main(String[] args) { ExceptionTest test= new ExceptionTest(); test.test(); } }
用logger.error(e);打印日志,輸出結果如下:
19:17:39.753 [main] ERROR myProject.ExceptionTest - java.lang.ArithmeticException: / by zero
可見,用這種方法打印的日志,只有大概的錯誤信息,並沒有指出報錯的代碼位置,不便於查找錯誤。用logger.error(e.getMessage());也是輸出這種大概的錯誤信息。
再見如下代碼:
package myProject; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class ExceptionTest { private static final Logger logger=LogManager.getLogger(); public void test() { try { int i=1/0; }catch(Exception e){ logger.error("ExceptionTest Exception:",e); } } public static void main(String[] args) { ExceptionTest test= new ExceptionTest(); test.test(); } }
用logger.error("ExceptionTest Exception:",e);,則輸出結果如下:
19:20:32.948 [main] ERROR myProject.ExceptionTest - ExceptionTest Exception: java.lang.ArithmeticException: / by zero at myProject.ExceptionTest.test(ExceptionTest.java:10) [classes/:?] at myProject.ExceptionTest.main(ExceptionTest.java:18) [classes/:?]
這和e.printStackTrace()打印的內容大致是相同的。
