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