有关异常处理日志


我们通常捕获异常都需要打印定位信息,

通常使用以下几种方式:

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也有相同的方法做支持。

相关