- 簡介
爲什麼要封裝log日誌,對比結果
封裝前:快捷鍵輸入loge便可打印出Log.e(TAG, "onCreate: ", );需要輸入參數TAG和參數msg。 且我們可以在Logcat頁面查看日誌信息。
缺點:
(1)輸入的參數較多且重複
(2)當打印的日誌信息過多時,不方便查找我們所需的信息
(3)無法快速指定是哪一行打印出來的信息
(4)應用發佈到市場上時,需要手動一個個刪除打印的日誌
封裝後:只需輸入你想打印的msg,使用方便。且可以在Logcat頁點擊類名即可跳轉到相應的位置。
//主要的代碼
public class LogUtils {
static String className;//類名
static String methodName;//方法名
static int lineNumber;//行數
/**
* 判斷是否可以調試
* @return
*/
public static boolean isDebuggable() {
return BuildConfig.DEBUG;
}
private static String createLog(String log ) {
StringBuffer buffer = new StringBuffer();
buffer.append("logutils");
buffer.append(methodName);
buffer.append("(").append(className).append(":").append(lineNumber).append(")================:");
buffer.append(log);
return buffer.toString();
}
/**
* 獲取文件名、方法名、所在行數
* @param sElements
*/
private static void getMethodNames(StackTraceElement[] sElements){
className = sElements[1].getFileName();
methodName = sElements[1].getMethodName();
lineNumber = sElements[1].getLineNumber();
}
public static void e(String message){
if (!isDebuggable())
return;
getMethodNames(new Throwable().getStackTrace());
Log.e(className, createLog(message));
}
public static void i(String message){
if (!isDebuggable())
return;
getMethodNames(new Throwable().getStackTrace());
Log.i(className, createLog(message));
}
public static void d(String message){
if (!isDebuggable())
return;
getMethodNames(new Throwable().getStackTrace());
Log.d(className, createLog(message));
}
public static void v(String message){
if (!isDebuggable())
return;
getMethodNames(new Throwable().getStackTrace());
Log.v(className, createLog(message));
}
public static void w(String message){
if (!isDebuggable())
return;
getMethodNames(new Throwable().getStackTrace());
Log.w(className, createLog(message));
}
}
//打開方式,在清單文件中app/build.gradle