14.3--定制自己的日志工具

早在1.4 节中我们就已经学过了 Android 日志工具的用法,并且日志工具也确实贯穿了我们整本书的学习。虽然 Android 中自带的日志工具功能非常强大,但也不能说是完全没有缺点,例如在打印日志的控制方面就做得不够好。

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

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

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

object  LogUtil {
    private const val VERBOSE = 1

    private const val DEBUG = 2

    private const val INFO = 3

    private const val WARN = 4

    private const val ERROR = 5

    private var level = VERBOSE

    fun v(tag: String,msg:String){
        if (level <= VERBOSE){
            Log.v(tag, msg)
        }
    }
    fun d(tag: String,msg:String){
        if (level <= DEBUG){
            Log.d(tag, msg)
        }
    }
    fun i(tag: String,msg:String){
        if (level <= INFO){
            Log.i(tag, msg)
        }
    }
    fun w(tag: String,msg:String){
        if (level <= WARN){
            Log.w(tag, msg)
        }
    }
    fun e(tag: String,msg:String){
        if (level <= ERROR){
            Log.e(tag, msg)
        }
    }

}

可以看到,我们在 Logutil 中先是定义了 VERBOSE、DEBUG、INFO、WARN、ERROR 这5 个整型常量,并且它们对应的值都是递增的。然后又定义了一个静态变量 level,可以将它的值指定为上面5 个常量中的任意一个。

接下来我们提供了 v() 、d() 、i() 、w() 、e() 这 5 个自定义的日志方法,在其内部分别调用了 Log.v()、Log.d()、Log.i()、Log. w()、Log.e()这 5 个方法来打印日志,只不过在这些自定义的方法中我们都加入了一个 if 判断,只有当 level 的值小于或等于对应日志级别值的时候,才会将日志打印出来。

这样就把一个自定义的日志工具创建好了,之后在项目里我们可以像使用普通的日志工具样使用 LogUtil,比如打印一行 DEBUG 级别的日志就可以这样写:

LogUtil.e("TAG","debug log")

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

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

 然后我们只需要修改 level 变量的值,就可以自由地控制日志的打印行为了。比如让 level 等于 VERBOSE 就可以把所有的日志都打印出来,让 level 等于 ERROR 就可以只打印程序的错误日志。

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

 

你可能感兴趣的:(Kotlin第一行代码)