发布时间:2022-12-20 11:00
public StackTraceElement[] getStackTrace()
返回一个表示该线程堆栈转储的堆栈跟踪元素数组。如果该线程尚未启动或已经终止,则该方法将返回一个零长度数组。如果返回的数组不是零长度的,则其第一个元素代表堆栈顶,它是该序列中最新的方法调用。最后一个元素代表堆栈底,是该序列中最旧的方法调用。
将以下代码加入被调用的函数中即可
for (StackTraceElement i : Thread.currentThread().getStackTrace()) {
System.out.println("TAG " +i);
}
Android的日志类使用方式一般为
Log.e(TAG,msg)
Tag值的命名一般都让人头疼,常见的做法是将Tag设为类名,但每次要打log都得给类设置一个TAG变量,写着很烦人。此篇的目的便是解决此问题,将TAG的命名抽取出来,我们只需要关心Log的msg即可。
public class LogUtils {
public static void d(String msg) {
Log.e(getCallerInfo(), msg);
}
private static String getCallerInfo() {
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
//0 VMStack.getThreadStackTrace
//1 Thread.getStackTrace
//2 LogUtil.getCallerInfo
//3 LogUtil.e
//4 Caller
StackTraceElement caller = stackTrace[4];
return caller.getClassName() + " " + caller.getMethodName() + " " + caller.getLineNumber();
}
}
其他级别日志类似补充即可,使用方法:
LogUtils.d("hello world!")