javaStackTrace

StackTrace线程运行栈

package com.jiek;

import android.util.Log;

/**
 * Created by jiek on 10/12/2015.
 * contact me: gaopinjie@gmail.com
 */
public class StackTrace {
    private static boolean isDebug = true;

    public static boolean isDebug() {
        return isDebug;
    }

    private static void l(String... msgs) {
        for (String msg : msgs) {
            Log.println(Log.DEBUG, "jiekTrace", msg);
        }
    }

    private static void l(StackTraceElement... stackTraceElements) {
        for (StackTraceElement stackTraceElement : stackTraceElements) {
//            way 1
            l(stackTraceElement.toString());
//            way 2
//            l(stackTraceElement.getClassName() + "." + stackTraceElement.getFileName() + "." + stackTraceElement.getMethodName() + ">line:" + stackTraceElement.getLineNumber());
        }
    }

    public static void trace(String msg) {
        l(msg);
        trace();
    }

    public static void traceAll(String msg) {
        l(msg);
        traceAll();
    }

    public static void trace() {
        if (isDebug()) {
            try {
//            way 1
                StackTraceElement[] stackTraceElements = new Throwable().getStackTrace();
                l(stackTraceElements[1], stackTraceElements[2]);
//            way 2
//            StackTraceElement[] stackTraceElements = new Exception().getStackTrace();
//                l(stackTraceElements[1], stackTraceElements[2]);
            } catch (Exception e) {
                e.printStackTrace();
            }
            l("-------");
        }
    }

    public static void traceAll() {
        if (isDebug()) {
            try {
//        way 1
                l(new Throwable().getStackTrace());
//        way 2
//                l(new Exception().getStackTrace());
//         way 3
//                 new Exception("StackTrace: ").printStackTrace();
//         way 4
//                 new Throwable("StackTrace: ").printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

在需要监控的地方,导入 import static com.jiek.originalapk.StackTrace.trace; 就可以使用短方法去执行此静态方法。

SelfLog

线程栈加日志综合工具

package com.jiek;

import android.util.Log;
/**
 * Created by jiek on 10/12/2015.
 * contact me: gaopinjie@gmail.com
 */
public class StackTrace {
    private static boolean isDebug = true;

    public static boolean isDebug() {
        return isDebug;
    }

    private static void l(String... msgs) {
        for (String msg : msgs) {
            Log.println(Log.DEBUG, "jiekTrace", msg);
        }
    }

    private static void l(StackTraceElement... stackTraceElements) {
        for (StackTraceElement stackTraceElement : stackTraceElements) {
//            way 1
            l(stackTraceElement.toString());
//            way 2
//            l(stackTraceElement.getClassName() + "." + stackTraceElement.getFileName() + "." + stackTraceElement.getMethodName() + ">line:" + stackTraceElement.getLineNumber());
        }
    }

    public static void trace(String msg) {
        l(msg);
        trace();
    }

    public static void traceAll(String msg) {
        l(msg);
        traceAll();
    }

    public static void trace() {
        if (isDebug()) {
            try {
//        way 1
                StackTraceElement[] stackTraceElements = new Throwable().getStackTrace();
                l(stackTraceElements[1], stackTraceElements[2]);
//        way 2
//                StackTraceElement[] stackTraceElements = new Exception().getStackTrace();
//                l(stackTraceElements[1], stackTraceElements[2]);
            } catch (Exception e) {
                e.printStackTrace();
            }
            l("-------");
        }
    }

    public static void traceAll() {
        if (isDebug()) {
            try {
//        way 1
                l(new Throwable().getStackTrace());
//        way 2
//                l(new Exception().getStackTrace());
//         way 3
//                 new Exception("StackTrace: ").printStackTrace();
//         way 4
//                 new Throwable("StackTrace: ").printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public static void v(String msg) {
        v("", msg);
    }

    public static void v(String tag, Throwable tr) {
        println(Log.VERBOSE, tag, tr);
    }

    public static void v(String tag, String msg) {
        println(Log.VERBOSE, tag, msg);
    }

    public static void d(String msg) {
        d("", msg);
    }

    public static void d(String tag, Throwable tr) {
        println(Log.DEBUG, tag, tr);
    }

    public static void d(String tag, String msg) {
        println(Log.DEBUG, tag, msg);
    }

    public static void i(String msg) {
        i("", msg);
    }

    public static void i(String tag, Throwable tr) {
        println(Log.INFO, tag, tr);
    }

    public static void i(String tag, String msg) {
        println(Log.INFO, tag, msg);
    }

    public static void w(String msg) {
        w("", msg);
    }

    public static void w(String tag, Throwable tr) {
        println(Log.WARN, tag, tr);
    }

    public static void w(String tag, String msg) {
        println(Log.WARN, tag, msg);
    }

    public static void e(String msg) {
        e("", msg);
    }

    public static void e(String tag, Throwable tr) {
        println(Log.ERROR, tag, tr);
    }

    public static void e(String tag, String msg) {
        println(Log.ERROR, tag, msg);
    }

    private static void println(int priority, String tag, @NonNull String msg) {
        try {
            if (isDebug()) {
                Log.println(priority, tag, msg);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private static void println(int priority, String tag, @NonNull Throwable tr) {
        println(priority, tag, "", tr);
    }

    private static void println(int priority, String tag, String msg, @NonNull Throwable tr) {
        try {
            if(isDebug()) {
                e("logStackTrace throwable", tag);
                Log.println(priority, tag, msg + '\n' + Log.getStackTraceString(tr));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

使用方法也可同理使用

Last updated

Was this helpful?