Android開發過程當中常常須要向控制檯輸出日誌信息,有些人還在用Log.i(tag,msg)的形式或者system.out.println(msg)方式嗎?本篇文章對日誌信息輸出進行優化,以達到快速定位輸出日誌位置及輸出規範日誌的效果。日誌輸出行展現調用輸出日誌信息在哪一個文件的第幾行,而且能夠和點擊跳轉到對應位置的做用。java
一、在項目中直接調用Log.i(tag,msg)或者println函數,這是初級開發者的作法,不便於後期維護與統一控制。
二、在項目中對輸出操做進行封裝,在封裝類中統一調用,這是成熟開發人員的作法,便於統一控制日誌輸出,並在發版時取消日誌輸出操做。
三、對第二種方法進一步優化,讓日誌全面展現調用信息及方便開發過程當中經過IDE直接跳轉到調用位置。本文即對第三種優化進行記錄。函數
將常見日誌輸出操做統一放到一個類中,項目須要輸出日誌時經過這個類進行調用,相信你們都有封裝,此步不作詳細說明。優化
咱們在封裝Log操做時常常遇到一個難題,那就是TAG如何制定,讓調用者做爲參數傳入仍是固定使用一個常亮?個人操做時自動調出調用位置信息,將這些信息進行處理後做爲TAG,查看日誌時看一看到是哪一個文件的第幾行在輸出日誌。日誌
如下爲獲取TAG信息的方法,能夠直接複製到代碼中調用,將其做爲文本內容經過println函數輸出也可實現此效果。code
/** * 運行棧類名 */ 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(); }