android 自定义库,Android自定义Log库

背景

我们在开发的时候肯定会打一些Log,特别是在调试代码或者bug的时候,我们都会打一些Log日志来记录,但是当我们发布正式版本的时候,尼玛,要一行一行的去掉,这就尴尬了。

ef509328a466?nomobile=yes

懵逼状态

励志封装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);

}

其中的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: ════════════════════════════════════════════

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值