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