大家在开发项目的过程中,应该经常会需要分析调用栈信息,所以这里提供一个调用栈打印工具类,大家拿去直接用就行了
java
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
public class StringLogUtils {
public static String printStackTrace(Throwable throwable) {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(bos);
String result = null;
try {
throwable.printStackTrace(ps);
result = bos.toString();
} finally {
try {
ps.close();
} catch (Exception e) {
}
}
return result;
}
public static String printStackTrace(Thread thread, boolean keepCallingFunction) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("Thread: " + thread.getName() + ", id: " + thread.getId() + ", Group: " + thread.getThreadGroup().getName() + ", state: " + thread.getState())
.append("\n");
int index = 2;
if (!keepCallingFunction) {
index++;
}
StackTraceElement[] trace = thread.getStackTrace();
for (; index < trace.length; index++) {
StackTraceElement traceElement = trace[index];
stringBuilder.append("\tat " + traceElement)
.append("\n");
}
return stringBuilder.toString();
}
public static String printStackTrace(Thread thread) {
return printStackTrace(thread, false);
}
public static String printStackTrace() {
return printStackTrace(Thread.currentThread(), false);
}
public static String splitUrl(String url, String split, int index) {
try {
String[] arr = url.split(split);
return arr[index];
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}