A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1黑马币
本帖最后由 袁也老师 于 2015-11-22 17:19 编辑

    在Android开发中,经常用到的一种debug手段就是打log了,但是log多了之后,版本一旦上线,肯定是要把所有的log全都删除的,如果要手动一条一条删除,那工作量实在太大了,完全不符合我们有经验的开发人员的身份嘛。    今天我们就在深圳问答网中找到了解决方法:


----------------------------------------------华丽的分割线----------------------------------------------
  1. public class LogUtil {

  2.     public static final int VERBOSE = 1;
  3.   
  4.     public static final int DEBUG = 2;
  5.   
  6.     public static final int INFO = 3;
  7.   
  8.     public static final int WARN = 4;
  9.       
  10.     public static final int ERROR = 5;
  11.   
  12.     public static final int NOTHING = 6;
  13.   
  14.     public static final int LEVEL = VERBOSE;
  15.   
  16.     public static void v(String tag, String msg) {
  17.         if (LEVEL <= VERBOSE) {
  18.         Log.v(tag, msg);
  19.         }
  20.     }
  21.   
  22.     public static void d(String tag, String msg) {
  23.         if (LEVEL <= DEBUG) {
  24.             Log.d(tag, msg);
  25.         }
  26.     }
  27.   
  28.     public static void i(String tag, String msg) {
  29.         if (LEVEL <= INFO) {
  30.             Log.i(tag, msg);
  31.         }
  32.     }
  33.   
  34.     public static void w(String tag, String msg) {
  35.         if (LEVEL <= WARN) {
  36.             Log.w(tag, msg);
  37.         }
  38.     }
  39.   
  40.     public static void e(String tag, String msg) {
  41.         if (LEVEL <= ERROR) {
  42.             Log.e(tag, msg);
  43.         }
  44.     }
  45.   
  46. }
复制代码


接下来我们提供了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就可以了。

----------------------------------------------华丽的分割线----------------------------------------------
    简单一点,就是把所有Log封装好,通过一个Boolean判断是否显示就可以啦。
     现在大家是不是觉得经验又更加丰富了!

1 个回复

倒序浏览
自己写一个LogUtils用于管理Log
public class LogUtils{
        public static void i(String tag,String content){
                Log.i(String tag,String content);
        }
        public static void d(String tag,String content){
                Log.d(String tag,String content);
        }
        public static void e(String tag,String content){
                Log.e(String tag,String content);
        }
        public static void w(String tag,String content){
                Log.w(String tag,String content);
        }
        public static void v(String tag,String content){
                Log.v(String tag,String content);
        }
}
平时调用此类中的方法,最后的时候讲方法中复写的Log的方法去掉就可以了。


如果感觉可以的话,给几个黑马币吧~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马