Java 如何在日志中优雅的打印 Exception
一、使用 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.shuofxz.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();
}
}