安卓开发:定制自己的日志工具
2016-07-12 19:10
323 查看
虽然Android自带的日志工具功能非常强大,但也不能说完全没有缺点,例如在打印日志的控制方面就做的不够好。
打个比方,你正在编写一个比较庞大的项目,期间为了方便调试,在代码的很多地方都打印了大量的日志,最近项目已经基本完成了,但是却有一个非常让人头痛的问题,之前用于调试的那些日志,在项目正式上线之后仍然会照常打印,这样不仅会降低程序的运行效率,还有可能将一些机密性的数据泄露出去。
那该怎么办呢?难道要一行一行把所有打印日志的代码都删除?显然这不是什么好的方法,不仅费时费力,而且以后你继续维护这个项目的时候可能还会需要这些日志。因此,最理想的情况是能够自由控制日志的打印,当程序处于开发阶段就让日志打印出来,当程序上线之后就把日志屏蔽掉。
我们只需要定制一个自己的日志工具就可以轻松完成了。比如新建一个LogUtil类,代码如下所示:
可以看到,我们在LogUtil中先是定义了VERBOSE、DEBUG、INFO、WARN、ERROR、NOTHING这六个整型常量,并且它们对应的值都是递增的。然后又定义了一个LEVEL常量,可以将它的值指定为上面六个常量中的任意一个。
接下来我们就提供了v()、d()、i()、w()、e()这五个自定义的日志方法,在其内部分别调用Log.v()、Log.d()、Log.i()、Log.w()、Log.e()这五个方法来打印日志,只不过在这些自定义的方法中我们都加入了一个if判断,只有当LEVEL常量的值小于或等于对应日志级别值得时候,才会将日志打印出来。
这样就把一个自定义的日志工具创建好了,之后在项目里我们可以像使用普通的日志工具一样使用LogUtil,比如打印一行日志就可以这样写:
然后我们只需要修改LEVEL常量的值,就可以自由地控制日志的打印行为。比如让LEVEL等于VERBOSE就可以把所有的日志都打印出来;让LEVEL等于NOTHING就可以把所有的日志屏蔽掉。
注:文章采摘自《第一行代码》
打个比方,你正在编写一个比较庞大的项目,期间为了方便调试,在代码的很多地方都打印了大量的日志,最近项目已经基本完成了,但是却有一个非常让人头痛的问题,之前用于调试的那些日志,在项目正式上线之后仍然会照常打印,这样不仅会降低程序的运行效率,还有可能将一些机密性的数据泄露出去。
那该怎么办呢?难道要一行一行把所有打印日志的代码都删除?显然这不是什么好的方法,不仅费时费力,而且以后你继续维护这个项目的时候可能还会需要这些日志。因此,最理想的情况是能够自由控制日志的打印,当程序处于开发阶段就让日志打印出来,当程序上线之后就把日志屏蔽掉。
我们只需要定制一个自己的日志工具就可以轻松完成了。比如新建一个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< 4000 /span> v(String tag, String msg){ if (LEVEL <= VERBOSE) { Log.v(tag, msg); } } public static void d(String tag, String msg){ if (LEVEL <= DEBUG) { Log.v(tag, msg); } } public static void i(String tag, String msg){ if (LEVEL <= INFO) { Log.v(tag, msg); } } public static void w(String tag, String msg){ if (LEVEL <= WARN) { Log.v(tag, msg); } } public static void e(String tag, String msg){ if (LEVEL <= ERROR) { Log.v(tag, msg); } } }
可以看到,我们在LogUtil中先是定义了VERBOSE、DEBUG、INFO、WARN、ERROR、NOTHING这六个整型常量,并且它们对应的值都是递增的。然后又定义了一个LEVEL常量,可以将它的值指定为上面六个常量中的任意一个。
接下来我们就提供了v()、d()、i()、w()、e()这五个自定义的日志方法,在其内部分别调用Log.v()、Log.d()、Log.i()、Log.w()、Log.e()这五个方法来打印日志,只不过在这些自定义的方法中我们都加入了一个if判断,只有当LEVEL常量的值小于或等于对应日志级别值得时候,才会将日志打印出来。
这样就把一个自定义的日志工具创建好了,之后在项目里我们可以像使用普通的日志工具一样使用LogUtil,比如打印一行日志就可以这样写:
LogUtil.d("TAG","debug log");
LogUtil.w("TAG","warn log");
然后我们只需要修改LEVEL常量的值,就可以自由地控制日志的打印行为。比如让LEVEL等于VERBOSE就可以把所有的日志都打印出来;让LEVEL等于NOTHING就可以把所有的日志屏蔽掉。
注:文章采摘自《第一行代码》
相关文章推荐
- Python socket 通信
- Qt之窗口动画(下坠、抖动、透明度)
- Zookeeper 注册中心解析
- Qt之窗口动画(下坠、抖动、透明度)
- Qt之窗口动画(下坠、抖动、透明度)
- Node.js 常用 API
- cf 689 B(最短路)
- IOS Dev Intro - NSFileManager
- mjpg-streamer结构
- GC回收过程
- php开发那点事儿(一)
- MUI上拉加载
- codeforces 690C3 Brain Network
- k8s Deployment
- 结构体大小“再理解”
- 归并排序求逆序数 NYOJ 117
- HDU-Can you find it?(二分查找)
- 有哪些文艺而有韵味的句子?
- 二.1Web初识---1.2 CSS
- IOS Dev Intro - Sandbox