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());
        }
    }
}


 

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