e.printStackTrace()打印在哪里以及如何e.printStackTrace()的内容打印在日志中
Posted bonniewss
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了e.printStackTrace()打印在哪里以及如何e.printStackTrace()的内容打印在日志中相关的知识,希望对你有一定的参考价值。
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()打印的内容大致是相同的。
以上是关于e.printStackTrace()打印在哪里以及如何e.printStackTrace()的内容打印在日志中的主要内容,如果未能解决你的问题,请参考以下文章
e.getMessage() e.printStackTrace() 和e.printStackTrace() 小结
怎么在log.error()里面把e.printStackTrace的堆栈信息打印出来?
我应该在发布之前从我的代码中删除 e.printStackTrace()
java知识点异常throw new RuntimeException(e)与e.printStackTrace( )的区别