標籤:int 效果 項目 進一步 規範 static cat 開發人員 roi
概述
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(); }
Android 項目Log日誌輸出最佳化