zoukankan      html  css  js  c++  java
  • Android 定制自己的日志工具

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

      那该怎么办呢,难道要一行一行把所有打印日志的代码都删掉?显然这不是什么好点子,不仅费时费力,而且以后你继续维护这个项目的时候可能还会需要这些日志。因此,最理想的情况是能够自由地控制日志的打印,当程序处于开发阶段就让日志打印出来,当程序上线了之后就把日志屏蔽掉。

      看起来好像是挺高级的一个功能,其实并不复杂,我们只需要定制一个自己的日志工具就可以轻松完成了。比如新建一个LogUtil类,代码如下所示:

    /**
     * 自定义日志类
     * 功能简介:在项目中自由控制日志打印,可以指定日志打印级别,可以开关日志打印
     * @author guopeng
     * @date 2015年12月22日
     */
    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中先是定义了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,比如打印一行DEBUG级别的日志就可以这样写:

    LogUtil.d("TAG", "debug log");

    打印一行WARN级别的日志就可以这样写:

    LogUtil.w("TAG", "warn log");

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

    使用了这种方法之后,刚才所说的那个问题就不复存在了,你只需要在开发阶段将LEVEL指定成VERBOSE,当项目正式上线的时候将LEVEL指定成NOTHING就可以了。

  • 相关阅读:
    MPS和MRP之间有什么样的关系呢
    java中静态代码块详解
    SQL server 分组后每组取出任意一行
    人是否能成功,其实可能很早就能看出来
    国内外产品经理的区别
    Yarn 和 NPM 国内快速镜像(淘宝镜像)
    vue-cli 使用less 遇到的问题 || vue-cli 使用less
    布隆过滤器
    PHP性能优化
    Redis-高并发代言词,为什么做分布式要Redis?
  • 原文地址:https://www.cnblogs.com/guop/p/5066206.html
Copyright © 2011-2022 走看看