android中定制自己的日志打印工具

来源:互联网 发布:自控软件 编辑:程序博客网 时间:2024/06/09 15:46

     虽然Android 中自带的日志工具Log功能非常强大,但也不能说是完全没有缺点,例如在打印日志的控制方面就做得不够好。打个比方,你正在编写一个比较庞大的项目,期间为了方便调试,在代码的很多地方都打印了大量的日志,最近项目已经基本完成了,但是却有一个非常让人头疼的问题,之前用于调试的那些日志, 在项目正式上线之后仍然会照常打印, 这样不仅会降低程序的运行效率,还有可能将一些机密性的数据泄露出去。那该怎么办呢,难道要一行一行把所有打印日志的代码都删掉?显然这不是什么好点子,不仅费时费力,而且以后你继续维护这个项目的时候可能还会需要这些日志。

    因此,最理想的情况是能够自由地控制日志的打印,当程序处于开发阶段就让日志打印出来,当程序上线了之后就把日志屏蔽掉。看起来好像是挺高级的一个功能,其实并不复杂,我们只需要定制一个自己的日志工具就可以轻松完成了。

(1)简单控制是否打印

比如新建一个LG类,代码如下所示:

/** * 对日志进行管理 */public class LG {    /**     * 是否开启debug     */    public static boolean isDebug = true;    /**     * 错误     */    public static void e(Class<?> clazz, String msg) {        if (isDebug) {            Log.e(clazz.getSimpleName(), msg + "");        }    }    /**     * 信息     */    public static void i(Class<?> clazz, String msg) {        if (isDebug) {            Log.i(clazz.getSimpleName(), msg + "");        }    }    /**     * 警告     */    public static void w(Class<?> clazz, String msg) {        if (isDebug) {            Log.w(clazz.getSimpleName(), msg + "");        }    }}

    上面的写法简单方便,可以用在小程序中,当没有上线的时候,isDebug=true,上线之前改为false,这样上线的应用就不会打印任何日志信息。

(2) 可以控制不同等级的Log打印,

如果要考虑得更多的话,上面的方法是不够用的,比如新建一个LogUtil类,代码如下所示:

public class LogUtil {    public static final int VERBOSE = 1;    public static final int DEBUG = 2;    public static final int INFO = 3;    public static final int WARN = 4;    public static final int ERROR = 5;    public static final int NOTHING = 6;    public static final int LEVEL = VERBOSE;    public static void v(String tag, String msg) {        if (LEVEL <= VERBOSE) {            Log.v(tag, msg);        }    }    public static void d(String tag, String msg) {        if (LEVEL <= DEBUG) {            Log.d(tag, msg);        }    }    public static void i(String tag, String msg) {        if (LEVEL <= INFO) {            Log.i(tag, msg);        }    }    public static void w(String tag, String msg) {        if (LEVEL <= WARN) {            Log.w(tag, msg);        }    }    public static void e(String tag, String msg) {        if (LEVEL <= ERROR) {            Log.e(tag, msg);        }    }}

   

      可以看到,我们在 LogUtil中先是定义了VERBOSEDEBUGINFOWARNERRORNOTHING这六个整型常量,并且它们对应的值都是递增的。然后又定义了一个LEVEL常量,可以将它的值指定为上面六个常量中的任意一个。接下来我们提供了v()d()i()w()e()这五个自定义的日志方法,在其内部分别调用了Log.v()Log.d()Log.i()Log.w()Log.e()这五个方法来打印日志,只不过在这些自定义的方法中我们都加入了一个if判断,只有当 LEVEL 常量的值小于或等于对应日志级别值的时候,才会将日志打印出来。这样就把一个自定义的日志工具创建好了,之后在项目里我们可以像使用普通的日志工具一样使用LogUtil,比如打印一行DEBUG级别的日志就可以这样写:LogUtil.d("TAG","debug log");打印一行WARN级别的日志就可以这样写:LogUtil.w("TAG","warn log");

   然后我们只需要修改 LEVEL常量的值,就可以自由地控制日志的打印行为了。比如让LEVEL等于VERBOSE就可以把所有的日志都打印出来,让 LEVEL等于WARN就可以只打印警告以上级别的日志,让LEVEL等于 NOTHING 就可以把所有日志都屏蔽掉。LEVEL指定成VERBOSE,当项目正式上线的时候将LEVEL指定成NOTHING就可以了。

   这种方式能够分类的打印想要的不同等级的日志信息。

(3)用三方打印工具kyLog

GitHub里面的开源日志打印工具:地址

dependencies {    compile 'com.kyosky110.kylog:kylog:1.0.1'}

具体理解参考博客

KyLog的特性:

  • 打印类名信息
  • 打印方法信息
  • 打印json内容
  • 打印类的属性值
  • 打印数据集合list、map

简单打印:
KyLog.d("hello,word");KyLog.e("hello,word");KyLog.d("%d个小蜜蜂", 4);//打印统配符


打印JSON格式:

KyLog.json("{\"person\":{\"name\":\"小蜜蜂\",\"sex\":\"男\",\"age\":\"18\"}}");


打印map对象

Map<String,String> map = new HashMap<>();

map.put("你好","我很好");map.put("我好", "你很好");KyLog.object(map);

打印对象

Person person = new Person();person.setAge(10);person.setSex(true);person.setName("lily");person.setSays("hello man");KyLog.object(person);

打印list

List<Person> list = new ArrayList<>();list.add(person);KyLog.object(list);

取消打印

推荐在自己的applicatoin类里面添加

KyLog.configAllowLog = false;


0 0
原创粉丝点击