您的位置:首页 > 编程语言

第一行代码总结:13.3定制自己的日志工具

2015-11-28 15:04 204 查看
13.3定制自己的日志工具

【总结:测试时,自己调用已经定义好的打印出不同级别的日志方法LogUtil.v(),LogUtil.d(),

LogUtil.i(),LogUtil.w(),LogUtil.e().这些方法分别是能够打印出其及其之下级别的日志。

此时,如果我们更改LEVEL的值,相应的打印日志的方法有的就会执行,有的就不会执行。若我们将LEVEL定为VERBOSE,则所有的打印日志的方法都会得到执行。若将LEVEL定为WARN,则只有LogUtil.w()和LogUtil.e()两个打印日志的方法会得到执行。因为它们的级别在WARN及其之上。】

android自带的日志工具的缺点:在打印日志的控制方面做得不够好。

比如:你正在编写一个比较庞大的项目,期间为了方便调试,在代码的很多地方都打印了大量的日志。最近项目已经基本完成了,但是却有一个非常让人头疼的问题,之前用于调试的那些日志,在项目正式上线之后仍然会照常打印,这样不仅会降低程序的运行效率,还有可能将一些机密性的数据泄露出去。

怎么办呢?

难道要一行一行把所有打印日志的代码都删掉?显然这不是什么好方法,不仅费时费力,而且以后你继续维护这个项目的时候可能还需要这些日志。

最好的办法:就是能够自由地控制日志的打印,当程序处于开发阶段就让日志打印出来,当程序上线之后就把日志屏蔽掉。

步骤:

1、新建一个LogUtil类,在该类中:

(1)定义六个整型常量VERBOSE,DEBUG,INFO,WARN,ERROR,NOTHING,并且它们对应的值都是递增的。

(2)定义一个LEVEL常量,可以将它的值指定为上面六个常量中的任意一个。我们只需要修改LEVEL常量的值,就可以自由地控制日志的打印行为。

比如,你将LEVEL指定成VERBOSE,那么在任何时候你调用任何方法都能打印出你想要的日志。

比如,你将LEVEL指定成WARN,那么当你调用WARN级别以下的方法时如v(),d(),i()方法,都不能打印出自己想要的结果。当你调用WARN级别及以上的方法时,就能打印出自己想要的结果。

比如,你将LEVEL指定成NOTHING,就可以把所有日志都屏蔽掉。

(3)接下来,定义五个方法v(),d(),i(),w(),e():

A、在这写方法中都分别提供一个静态的打印方法Log.v(),Log.d(),Log.i(),Log.w(),Log.e(),其接收的参数都是String tag,和String msg.这样,在测试的时候,直接用类名调方法即可。

B、在各方法执行之前,都加了一个if判断语句,只有当LEVEL常量的值小于或等于对应日志级别值的时候,才会将日志打印出来。

比如:打印一行DEBUG级别的日志:Log.d(“TAG”,”debuglog”);

代码示例:

public classLogUtil{

public static final int VERBOSE = 1;

publicstatic 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;//这里将级别指定为VERBOSE,表示所有VERBOSE级别之上的日志都会被打印出来。若指定为WARN,表示所有WARN级别及其以上的日志都会被打印。若指定为NOTHING,根据后面的方法,将不会打印日志。

public static void v(String tag, String msg){

if(LEVEL<= VERBOSE){

Log.v(tag,msg);

}

}

publicstatic void d(String tag, String msg){

if(LEVEL<= DEBUG){

Log.v(tag,msg);

}

}

publicstatic void i(String tag, String msg){

if(LEVEL<= INFO){

Log.v(tag,msg);

}

}

publicstatic void w(String tag, String msg){

if(LEVEL<= WARN){

Log.v(tag,msg);

}

}

publicstatic void e(String tag, String msg){

if(LEVEL<= ERROR){

Log.v(tag,msg);

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: