第一行代码总结: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);
}
}
}
【总结:测试时,自己调用已经定义好的打印出不同级别的日志方法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);
}
}
}
相关文章推荐
- Java学习理解路线图
- java实现二叉树的中序遍历和后续遍历
- C++primer plus第六版课后编程练习答案8.6
- C++变量及初始化的总结
- spring properties 资源文件 方式一
- python线程和进程,生产者消费者模型
- 个人优秀代码片段2
- CI框架uri去掉index.php
- C++primer plus第六版课后编程练习答案8.5
- Java按照某一时区格式化时间
- xcode修改代码目录结构出现clang: error: no such file or directory 解决方法
- ThinkPHP框架--邮箱激活功能
- 对RmiJdbc的二次开发
- PHP高手干货分享:要大大提高PHP效率
- C++primer plus第六版课后编程练习答案8.4
- Python基础_继承类
- Java模拟HTTP的Get和Post请求
- python遇到的问题
- C++primer plus第六版课后编程练习答案8.3
- C++中static关键字的使用总结