Android自定義Log庫

背景

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


懵逼狀態(tài)

勵志封裝Log庫

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

自定義內容

  1. 增加變量來區(qū)分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);
}

其中的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() {

}
}

具體的輸出類型是由對應的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);
}
}

總結

我們可以看到,它實際調用的是系統的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: ════════════════════════════════════════════

最后附上源碼的下載地址,喜歡的朋友可以下載使用,代碼很少,也可以相互交流Android自定義Log庫
https://github.com/OnlyTerminator/CustomLog

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,523評論 25 708
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發(fā)現,斷路器,智...
    卡卡羅2017閱讀 134,991評論 19 139
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,971評論 6 342
  • “爸爸怎么還不來接我,說好四點半來接我的。”小櫻桃不開心地嘟著嘴。 “喲呵,瞧瞧這是誰呀?怎么,沒有人來接“蒼蠅”...
    念來過倒要字名閱讀 428評論 1 1
  • 前兩天,朋友跟我說“你多寫文字,我每次讀之都有收益”的時候,我有些傷感。如同雨來的時候,一直找不到傘。 好幾個深夜...
    爛漫婆婆閱讀 421評論 3 3