一、使用 log 库打印

使用 log 库如 slf4j

@Slf4j
public class MyDemo {
    public void demo() {
        try {
            int a = 10 / 0;
        }
        catch (Exception e) {
            // 注意用逗号后面接 exception,才会打印出完整的 stacktrace
            log.error("A something error", e);
            // 用加号连接只会打印 exception 名称
            log.error("B something error" + e);
        }
    }
}

执行结果

# 第一种打印出完整 stacktrace
22:58:41.064 [main] ERROR com.shuofxz.MyDemo - A something error
java.lang.ArithmeticException: / by zero
	at com.youdao.analysis.queqiaohealthcheck.MyDemo.main(MyDemo.java:9)

#第二种仅打印了 exception 的名称    
22:58:41.066 [main] ERROR com.shuofxz.MyDemo - B something errorjava.lang.ArithmeticException: / by zero

二、将 stacktrace 转换为 String

有时候需要将报错完整信息,以字符串的方式返回(如从客户端也能知道服务端具体报错的原因)

public class MyExceptionUtil {
    public static void main(String[] args) {
        Exception e = new Exception("my exception test");
        System.out.println(covertStackTraceToString(e));
    }

    public static String covertStackTraceToString(Exception e) {
        StringWriter sw = new StringWriter();
        e.printStackTrace(new PrintWriter(sw));
        return sw.toString();
    }
}