概述:
此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());
}
}
}