有时候一个方法被很多方法调用了,但是在调试应用程序的时候,需要知道是哪个方法调用它的,方便定位bug问题。否者,比较难以理清和解决一些bug问题。
适用:任何适用java语言编程的地方,java后端和android端。
以下是我总结的工具打印方法。你也可以基于此方法进行定制,可以打印完整的调用栈信息。
c
package utils;
/**
* 日之类测试方法
*/
public class LogsUtilsTest {
public static void main(String[] args) {
parentMethod01();
parentMethod03();
parentMethod05();
}
private static void parentMethod01(){
childMethod();
}
private static void parentMethod02(){
childMethod();
}
private static void parentMethod03(){
childMethod();
}
private static void parentMethod04(){
childMethod();
}
private static void parentMethod05(){
childMethod();
}
private static void childMethod(){
System.out.println("childMethod StackTrace:"+LogUtils.getParentClassStackTrace(LogsUtilsTest.class.getName()));
}
}
c
package utils;
/**
* 日志工具类
*/
public class LogUtils {
/**
* 获取当前方法调用的类名+方法+代码行
* @param currClassName
* @return
*/
public static String getParentClassStackTrace(String currClassName){
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
StackTraceElement log = stackTrace[2];
String tag = null;
int parent=0;
for (int i = 1; i < stackTrace.length; i++) {
StackTraceElement e = stackTrace[i];
if(e.getClassName().equals(currClassName)){
parent=i;
break;
}
}
StackTraceElement parentStack = stackTrace[parent+1];
tag = "《"+parentStack.getClassName() + "》.《" + parentStack.getMethodName()+"》.《"+parentStack.getLineNumber()+"》";
if (tag == null) {
tag = log.getClassName() + "." + log.getMethodName()+"."+log.getFileName()+"."+log.getLineNumber();
}
return tag;
}
}
代码运行打印: