android 能打印調用的方法的類,方法名,及調用行數的logutil

概述:
    此logutil最好的地方就是能打印調用的方法的類,方法名,及調用行數的logutil
    常規的打印log都需要自己定義一個tag,此種util是不需要tag的
    實際操作時可以定義tag爲工程名,總體看所有模塊的log信息,具體需要看某個模塊的打印就直接過濾類名就可以,因爲此util會直接打印調用方法的類出來,所以過濾類名就會將相應的打印信息打印處理來此util可以看到調用方法的行數,方便代碼跟蹤調試,實際用起來非常方便
    實際操作可以用studio設置輸入代碼提示代碼塊輸出代碼,比如我自己用的代碼塊的快捷鍵就是logu,只要設置了代碼塊的提示,實際就跟studio的原生的logd輸出Log.d(TAG, "");是一個效果,如果有客製化的需求可以自己修改添加log的開關,log等級等邏輯

=====================

import android.util.Log;

/**
 *  LogUtil.d("");
 *  一般TAG名爲項目工程名,實際使用只需調用LogUtil.d("");然後加入某個自己需要打印的變量值即可,具體調用此方法的類-方法名-[進程id]-調用方法的行數都會打印出來
 *  比如MainActivity-onCreate中添加LogUtil.d("mIntentType="+mIntentType);則打印如下
 *  05-13 22:53:31.988 10045-10045/com.xbh.systemsetting D/TCLSettings: MainActivity-onCreate-[1]-67:mIntentType=0
 *  SWITCH可通過LogUtil.SWITCH = false設置開關
 *  stack.getClassName()爲包含包名的全稱,可能會比較長
 *  
 */

public class LogUtil {
    public static String TAG = "TCLSettings";
    public final static String MATCH = "%s-%s-%s-%d";
    public final static String CONNECTOR = ":";
    public static boolean SWITCH = true;
    public static String buildHeader() {
        StackTraceElement stack = Thread.currentThread().getStackTrace()[4];
        String fileClassName = stack.getFileName();
//        return String.format(MATCH, stack.getClassName(), stack.getMethodName(), stack.getLineNumber()) + CONNECTOR;
        return String.format(MATCH, fileClassName.substring(0,fileClassName.indexOf(".")), stack.getMethodName(),
                "["+Thread.currentThread().getId()+"]", stack.getLineNumber()) + CONNECTOR;
    }

    public static void v(Object msg) {
        if (SWITCH && msg!=null) {
            Log.v(TAG, buildHeader() +  msg.toString());
        }
    }

    public static void d(Object msg) {
        if (SWITCH && msg!=null) {
            Log.d(TAG, buildHeader() + msg.toString());
        }
    }

    public static void i(Object msg) {
        if (SWITCH && msg!=null) {
            Log.i(TAG, buildHeader() + msg.toString());
        }
    }

    public static void w(Object msg) {
        if (SWITCH && msg!=null) {
            Log.w(TAG,buildHeader() + msg.toString());
        }
    }

    public static void e(Object msg) {
        if (SWITCH && msg!=null) {
            Log.e(TAG, buildHeader() + msg.toString());
        }
    }
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章