安卓的log是个很方便的调试手段。但是Log多了以后就会很明显的下面很乱。有的时候我们要控制打log的tag没有设置好的话,没有办法正则匹配的话就没有办法来控制这些log的过滤,这个问题很多时候让我很头疼特别是以前使用eclipse的时候默认只显示5000条数据的时候。让寡人真的是想自杀的心都有。
见过一些log的封装类,但是一只没有达到我心目中的要求。
所以自己写了下面的东西来满足自己的要求吧。
首先我的log工具类要有下面这几个功能
- 正常的log的功能。(这是废话)
- 黑名单过滤模式。 (去掉那些我不想看的tag)
- 白名单保留模式。(只留存我想要看的tag)
关闭模式。 (全都木有)
然后我们来看看要怎么实现吧(下面的列子只有log.d)
public class LogUtil {
//方便下面的方法不需要每次都传Tag
private static String Tag = "默认的Tag值";
//当前的模式
public static State state =State.DEFAULT;
//需要的log模式
//分辨是默认,白名单,黑名单,关闭
public enum State {
DEFAULT, WHITE, BLACK,CLOSE
}
//这个就是不需要传tag的d方法
public static void d(String msg) {
d(Tag, msg);
}
public static void d(String tag,String msg) {
if (msg==null) {
//万一需要打的log值为null
Log.d(tag,"null");
}else {
if (state == State.DEFAULT) {
//正常模式
Log.d(tag, msg);
} else if (state == State.WHITE) {
//白名单模式
if (inWhiteList(tag)) {
Log.d(tag, msg);
}
} else if (state == State.BLACK) {
//黑名单模式
if (!inBlackList(tag)) {
Log.d(tag, msg);
}
}else {
}
}
}
}
private static boolean inWhiteList(String temp) {
//保存白名单tag的list
ArrayList<String> tag_list = new ArrayList<String>();
return tag_list.contains(temp);
}
private static boolean inBlackList(String temp) {
//保存白名单tag的黑名单的
ArrayList<String> tag_list = new ArrayList<String>();
return tag_list.contains(temp);
}
我们要启动黑白名单时,只需将需要处理的tag值丢到对应的list中就可以了。
然后将 public static State state =State.DEFAULT;
更改为对应的模式菜单即可。