Android自定义Log库

背景

我们在开发的时候肯定会打一些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);
}

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值