Android 日誌庫-Logger的封裝及AS3.0日誌無法對齊的問題

怎麼引入Logger就不說了,網上一大堆,本文記錄在使用中對 Logger 的封裝和Android Studio 3.0以上中Logger的使用。

對Logger的封裝

在使用任何第三方庫的時候,如果可以都要進行一次封裝以便於在以後進行替換,否則你需要在整個項目中所有用到該三方庫的地方修改。

具體代碼如下:

public final class LogUtils {

    /**
     * 這裏使用 Logger.t()方法來設置tag,也可以在Logger初始化的時候配置全局TAG
     */
    private static final String TAG = "TAG";

    //是否可以打印:默認true
    public static final boolean IS_PRINT_LOG = true;

    /**
     * 另外一種控制是否打印日誌的方式。注意導入的包是:import com.orhanobut.logger.BuildConfig
     * 該方法的優點是debug 和 relase 版本不需要手動修改日誌會自動打印或者不打印,缺點是如果有多個module會導致無法打印的問題,具體解決百度
     */
//    public static final boolean IS_PRINT_LOG = BuildConfig.DEBUG;


    public static void v(String tag, String message) {
        if (IS_PRINT_LOG) {
            Logger.t(tag).v(message);
        }
    }

    public static void v(String message) {
        if (IS_PRINT_LOG) {
            Logger.t(TAG).v(message);
        }
    }

    public static void d(String tag, Object message) {
        if (IS_PRINT_LOG) {
            Logger.t(tag).d(message);
        }
    }

    public static void d(Object message) {
        if (IS_PRINT_LOG) {
            Logger.d(message);
        }
    }

    public static void i(String tag, String message) {
        if (IS_PRINT_LOG) {
            Logger.t(tag).i(message);
        }
    }

    public static void i(String message) {
        if (IS_PRINT_LOG) {
            Logger.t(TAG).i(message);
        }
    }

    public static void w(String tag, String message) {
        if (IS_PRINT_LOG) {
            Logger.t(tag).w(message);
        }
    }

    public static void w(String message) {
        if (IS_PRINT_LOG) {
            Logger.t(TAG).w(message);
        }
    }

    public static void json(String tag, String json) {
        if (IS_PRINT_LOG) {
            Logger.t(tag).json(json);
        }
    }

    public static void json(String json) {
        if (IS_PRINT_LOG) {
            Logger.t(TAG).json(json);
        }
    }

    public static void e(String tag, String message) {
        if (IS_PRINT_LOG) {
            Logger.t(tag).e(message);
        }
    }

    public static void e(String message) {
        if (IS_PRINT_LOG) {
            Logger.t(TAG).e(message);
        }
    }

    public static void e(Exception e, String message) {
        if (IS_PRINT_LOG) {
            Logger.e(e, message);
        }
    }

    public static void xml(String xml) {
        if (IS_PRINT_LOG) {
            Logger.t(TAG).xml(xml);
        }
    }

    public static void xml(String tag, String xml) {
        if (IS_PRINT_LOG) {
            Logger.t(tag).xml(xml);
        }
    }
}

解決在Android Studio 3.0以上的版本中Logger無法對齊的問題

在Android Studio 更新到3.0之後,發現打印出來的日誌會自動換行,導致無法對齊的現象,如下圖所示:

圖片截取自github上面提交的問題,我的因爲已經解決了,所以沒有設置回去。

這裏寫圖片描述

在Logger庫的 Issues 中有解決方法,如下圖所示的位置找就可以:

這裏寫圖片描述

或者這裏直接將解決方法列出來,代碼如下所示:

public class LogCatStrategy implements LogStrategy {

        @Override
        public void log(int priority, String tag, String message) {
            Log.println(priority, randomKey() + tag, message);
        }

        private int last;

        private String randomKey() {
            int random = (int) (10 * Math.random());
            if (random == last) {
                random = (random + 1) % 10;
            }
            last = random;
            return String.valueOf(random);
        }
    }  


//Logger初始化的時候,將上面新建的類實例化,並設置到Logger中
 PrettyFormatStrategy strategy = PrettyFormatStrategy.newBuilder()
                .logStrategy(new LogCatStrategy())
                .tag("TAG")//(可選)這裏也可以設置全局TAG
                .build();
 Logger.addLogAdapter(new AndroidLogAdapter(strategy));

 //也可以寫成下面的這樣,來控制日誌是否打印
 Logger.addLogAdapter(new AndroidLogAdapter(strategy) {
            @Override
            public boolean isLoggable(int priority, String tag) {
                return BuildConfig.DEBUG;//(控制日誌是否打印)
            }
        });
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章