android: 一个非常强大的LOG开关---Log.isLoggable

在看SystemUI源码中,看到有些log的开关定义:

private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);

然后查看一些资料,发现这个还比较实用。

Log.isLoggable的定义:

isLoggable是android.util.Log提供的方法,用于检查指定TAG的等级,是否满足输出条件,如满足则返回true反之则返回false。在源码中的定义::

    /** 
     * Checks to see whether or not a log for the specified tag is loggable at the specified level.
     *
     *  The default level of any tag is set to INFO. This means that any level above and including
     *  INFO will be logged. Before you make any calls to a logging method you should check to see
     *  if your tag should be logged. You can change the default level by setting a system property:
     *      'setprop log.tag.<YOUR_LOG_TAG> <LEVEL>'
     *  Where level is either VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT, or SUPPRESS. SUPPRESS will
     *  turn off all logging for your tag. You can also create a local.prop file that with the
     *  following in it:
     *      'log.tag.<YOUR_LOG_TAG>=<LEVEL>'
     *  and place that in /data/local.prop.
     *
     * @param tag The tag to check.
     * @param level The level to check.
     * @return Whether or not that this is allowed to be logged.
     * @throws IllegalArgumentException is thrown if the tag.length() > 23
     *         for Nougat (7.0) releases (API <= 23) and prior, there is no
     *         tag limit of concern after this API level.
     */
    public static native boolean isLoggable(String tag, int level);

从以上得知:

    1.默认level是INFO

    2.只有leve >= INFO 才能输出,即level >= INFO 时isLoggable返回true,否则返回false

    3.可以通过setprop log.tag.<YOUT_LOG_TAG> <LEVEL>改变默认的level,比如adb shell setprop log.ACTIVITY LOG.DEBUG;也可以将这些属性按照log.tag.ACTIVITY = DEBUG写入/data/local.prop文件中

    4.如果tag的长度超过23会抛出IllegalArgumentException异常

在Log.java定义6中level

    /**
     * Priority constant for the println method; use Log.v.
     */
    public static final int VERBOSE = 2;

    /**
     * Priority constant for the println method; use Log.d.
     */
    public static final int DEBUG = 3;

    /**
     * Priority constant for the println method; use Log.i.
     */
    public static final int INFO = 4;

    /**
     * Priority constant for the println method; use Log.w.
     */
    public static final int WARN = 5;

    /**
     * Priority constant for the println method; use Log.e.
     */
    public static final int ERROR = 6;

    /**
     * Priority constant for the println method.
     */
    public static final int ASSERT = 7;

通过setprop log.ACTIVITY LOG.DEBUG改变log的level后,需要重启这个进程。这个log开关,在平常是关闭,不会打印过多log,当出现bug时在打开log开关,然后抓取log。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值