Android自定義Log庫

JulBirchell 8年前發布 | 5K 次閱讀 安卓開發 Android開發 移動開發

背景

我們在開發的時候肯定會打一些Log,特別是在調試代碼或者bug的時候,我們都會打一些Log日志來記錄,但是當我們發布正式版本的時候,尼瑪,要一行一行的去掉,這就尷尬了。

懵逼狀態

勵志封裝Log庫

本來想使用github上的Logger庫的,但是感覺有點煩中,后面看到了鴻洋大師寫過一篇關于Log庫的文章 Android反觀Log庫 后面我也是根據這個來簡單的修改的

自定義內容

  1. 增加變量來區分debug模式還是release模式,在release的情況下將所有的Log日志都去掉。
  2. 利用StackTraceElement來輸出我們的Log的位置,便于我們定位和尋找日志。

實現

我們以i的log來作為例子:

/**

  • iiiiiiiiiiiiii
  • @param content */ public static void i(String content){ i(null,content); }

public static void i(String tag,String content){ if (!sDebug) return; printer.i(getFinalTag(tag),content); }</code></pre>

其中的isDebug是我們的標識位,我們可以把它在初始化的時候來與編譯類型綁定起來。

其中Printer類是實現了打印Log日志功能的輸出類:

public class LogPrint implements Printer{

@Override public void d(String message, String str) { new DebugLogText(message).setup(str); }

@Override public void e(String message, String str) { new ErrorLogText(message).setup(str); }

@Override public void e(String message, String str,Throwable throwable) { new ErrorLogText(message).setup(str+throwable.getMessage()); }

@Override public void w(String message, String str) { new WarnLogText(message).setup(str); }

@Override public void i(String message, String str) { new InfoLogText(message).setup(str); }

@Override public void v(String message, String str) { new VerboseLogText(message).setup(str); }

@Override public void wtf(String message, Object... args) {

}

@Override public void json(String message, String json) { new InfoLogText(message).setup(json); }

@Override public void xml(String xml) {

}

@Override public void clear() {

} }</code></pre>

具體的輸出類型是由對應的Log類型來產生,我們來看一個類InfoLogText:

public class InfoLogText extends LogText {
public InfoLogText(String tag) {
    super(tag);
}

@Override protected void setUpHeader() { Log.i(mTag, SINGLE_DIVIDER); }

@Override protected void setUpFooter() { Log.i(mTag, DOUBLE_DIVIDER); }

@Override protected void setUpContent(String content) { StackTraceElement targetStackTraceElement = getTargetStackTraceElement(); Log.i(mTag, "(" + targetStackTraceElement.getFileName() + ":"

        + targetStackTraceElement.getLineNumber() + ")");
Log.i(mTag, content);

} }</code></pre>

總結

我們可以看到,它實際調用的是系統的Log的日志方法,當然拼接了,對應的Log日志的類和行數,具體的原理我們可以查看上面提到的鴻洋的文章。

好了,我么大家來看一下最后的日志效果

11-30 23:41:52.149 3580-3580/com.aotuman.weather I/aotuman: ********************************************
11-30 23:41:52.149 3580-3580/com.aotuman.weather I/aotuman: (MainActivity.java:30)
11-30 23:41:52.149 3580-3580/com.aotuman.weather I/aotuman: is a test
11-30 23:41:52.149 3580-3580/com.aotuman.weather I/aotuman: ════════════════════════════════════════════

 

 

來自:http://www.jianshu.com/p/ef509328a466

 

 本文由用戶 JulBirchell 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!