怎麼引入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;//(控制日誌是否打印)
}
});