有关异常处理日志
我们通常捕获异常都需要打印定位信息,
通常使用以下几种方式:
e.printStackTrace()
e.toString()
e.getMessage();
都可以打印出相信息。
e.printStackTrace()获取的是一个数组定位相关位置,但是log里一般不直接对外输出数组,这个方法一般也只用控制台观看异常,如果要查看相关的信息还要重新定义输出,一般不怎么用。
e.toString()会暴露错误类型,及其catch部分的异常信息,也不会给出调用链条。
e.getMessage()是比较常见的方法,会打印出被catch部分的异常信息,但不会给出完整的调用链,对于一般简单场景是合适的,前提是你的代码结构不复杂。
但如果是log级别的输出,其实有比较好用的方法。
public static void main(String[] args) { try { throw new RuntimeException("丢出的一个错误"); }catch (Exception e){ logger.error("我的要传达的信息"+e.getMessage()); // System.out.println(e.getMessage()); System.out.println("****************"); logger.error(e.toString()); System.out.println("****************"); logger.error(""+e.getStackTrace()); System.out.println("****************"); logger.error("我定义的异常信息",e); } }
打印信息如下:
10:57:40.148 [main] ERROR com.example.commontest.test.test - 我的要传达的信息丢出的一个错误 **************** 10:57:40.154 [main] ERROR com.example.commontest.test.test - java.lang.RuntimeException: 丢出的一个错误 **************** 10:57:40.155 [main] ERROR com.example.commontest.test.test - [Ljava.lang.StackTraceElement;@6996db8 **************** 10:57:40.159 [main] ERROR com.example.commontest.test.test - 我定义的异常信息 java.lang.RuntimeException: 丢出的一个错误 at com.example.commontest.test.test.main(test.java:18)
logger.error(“信息”,e);
信息:你需要传达的string信息,可以自行定义。
e:是你的异常。
使用的log包为常用的org.slf4j.Logger;log4j也有相同的方法做支持。