概述
Android開發過程中經常需要向控制台輸出日志信息,有些人還在用Log.i(tag,msg)的形式或者system.out.println(msg)方式嗎?本篇文章對日志信息輸出進行優化,以達到快速定位輸出日志位置及輸出規范日志的效果。日志輸出行展示調用輸出日志信息在哪個文件的第幾行,並且可以和點擊跳轉到對應位置的作用。
輸出日志的一般形式
1、在項目中直接調用Log.i(tag,msg)或者println函數,這是初級開發者的做法,不便於后期維護與統一控制。
2、在項目中對輸出操作進行封裝,在封裝類中統一調用,這是成熟開發人員的做法,便於統一控制日志輸出,並在發版時取消日志輸出操作。
3、對第二種方法進一步優化,讓日志全面展示調用信息及方便開發過程中通過IDE直接跳轉到調用位置。本文即對第三種優化進行記錄。
封裝日志操作
將常見日志輸出操作統一放到一個類中,項目需要輸出日志時通過這個類進行調用,相信大家都有封裝,此步不做詳細說明。
日志信息輸出優化
我們在封裝Log操作時經常遇到一個難題,那就是TAG如何制定,讓調用者作為參數傳入還是固定使用一個常亮?我的操作時自動調出調用位置信息,將這些信息進行處理后作為TAG,查看日志時看一看到是哪個文件的第幾行在輸出日志。
以下為獲取TAG信息的方法,可以直接復制到代碼中調用,將其作為文本內容通過println函數輸出也可實現此效果。
/**
* 運行棧類名
*/
static String stackClassName = "";
/**
* 運行棧
*/
static StackTraceElement[] stackTraceElements;
/**
* 獲取默認TAG
*/
private static String getDefaultTag(){
try {
//獲取當前運行任務棧信息
stackTraceElements = Thread.currentThread().getStackTrace();
//遍歷任務棧信息,獲取調用者信息並返回
for (StackTraceElement stackTraceElement : stackTraceElements) {
stackClassName = stackTraceElement.getClassName() + "";
//僅獲取本項目下的非此類調用信息
if (!stackClassName.contains(LogUtil.class.getSimpleName()) && stackClassName.contains("com.")) {
return "(" + stackTraceElement.getFileName() + ":" + stackTraceElement.getLineNumber() + ")";
}
}
} catch (Exception e) {
e.printStackTrace();
}
return LogUtil.class.getSimpleName();
}