有时候一个方法被很多方法调用了,但是在调试应用程序的时候,需要知道是哪个方法调用它的,方便定位bug问题。否者,比较难以理清和解决一些bug问题。
适用:任何适用java语言编程的地方,java后端和android端。
以下是我总结的工具打印方法。你也可以基于此方法进行定制,可以打印完整的调用栈信息。
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()));}
}
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;}
}
代码运行打印: