平时开发都是用log输出异常信息,但是如果需要把异常信息入库,就必须把异常对象转为字符串,如果直接用e.toString()或者e.getMessage(),异常信息会不全面,所以需要一个方法去转换
import java.util.ArrayList;
import java.util.List;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class a {
public static void main(String[] args) {
String error = null;
try {
String str = null;
str.toString();
}
catch (Exception e) {
error = exceptionToString(e);
}
if (error != null) {
System.out.println(error);
}
}
/**
* 打印异常信息
*/
public static String exceptionToString(Exception e) {
JSONObject obj = null;
try {
obj = JSONObject.parseObject(JSON.toJSONString(e));
}
catch (Exception ee) {
obj = JSONObject.parseObject(JSON.toJSONString(e).replace("@", ""));
}
List<String> list = new ArrayList<>();
list.add(e.toString());
JSONArray arr = obj.getJSONArray("stackTrace");
for (int i = 0; i < arr.size(); i++) {
list.add("\tat " + arr.getJSONObject(i).getString("className")
+ "."
+ arr.getJSONObject(i).getString("methodName")
+ "("
+ arr.getJSONObject(i).getString("fileName")
+ ":"
+ arr.getJSONObject(i).getString("lineNumber")
+ ")");
}
return String.join("\n", list);
}
}
效果: