Android自定義Log庫
背景
我們在開發的時候肯定會打一些Log,特別是在調試代碼或者bug的時候,我們都會打一些Log日志來記錄,但是當我們發布正式版本的時候,尼瑪,要一行一行的去掉,這就尷尬了。
懵逼狀態
勵志封裝Log庫
本來想使用github上的Logger庫的,但是感覺有點煩中,后面看到了鴻洋大師寫過一篇關于Log庫的文章 Android反觀Log庫 后面我也是根據這個來簡單的修改的
自定義內容
- 增加變量來區分debug模式還是release模式,在release的情況下將所有的Log日志都去掉。
- 利用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