Android 項目Log日誌輸出優化

概述

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();
    }
相關文章
相關標籤/搜索