Java日志记录函数调用栈方法

关于getStackTrace()

public StackTraceElement[] getStackTrace()

返回一个表示该线程堆栈转储的堆栈跟踪元素数组。如果该线程尚未启动或已经终止,则该方法将返回一个零长度数组。如果返回的数组不是零长度的,则其第一个元素代表堆栈顶,它是该序列中最新的方法调用。最后一个元素代表堆栈底,是该序列中最旧的方法调用。

android/java 调用栈

将以下代码加入被调用的函数中即可

for (StackTraceElement i : Thread.currentThread().getStackTrace()) {
    System.out.println("TAG " +i);
}

Android简单日志封装,类名+方法名为Tag

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!")

你可能感兴趣的:(Android,java,stacktrace,log)