第一行代码:Android(2nd ed)(18):开始启程——你的第一行 Android 代码 1.4.2

阅读数:14 2019 年 10 月 19 日 13:27

第一行代码:Android(2nd ed)(18):开始启程——你的第一行Android代码 1.4.2

(前行必备——掌握日志工具的使用:为什么使用 Log 而不使用 System.out)

我相信很多的 Java 新手都非常喜欢使用System.out.println()方法来打印日志,不知道你是不是也喜欢这么做。不过在真正的项目开发中,是极度不建议使用System.out.println()方法的!如果你在公司的项目中经常使用这个方法,就很有可能要挨骂了。

为什么System.out.println()方法会这么遭大家唾弃呢?经过我仔细分析之后,发现这个方法除了使用方便一点之外,其他就一无是处了。方便在哪儿呢?在 Eclipse 中你只需要输入 syso,然后按下代码提示键,这个方法就会自动出来了,相信这也是很多 Java 新手对它钟情的原因。那缺点又在哪儿了呢?这个就太多了,比如日志打印不可控制、打印时间无法确定、不能添加过滤器、日志没有级别区分……

听我说了这些,你可能已经不太想用System.out.println()方法了,那么 Log 就把上面所说的缺点全部都改好了吗?虽然谈不上全部,但我觉得 Log 已经做得相当不错了。我现在就来带你看看 Log 和 logcat 配合的强大之处。

首先刚才提到的快捷输入,在 Android Studio 当中也是有的,比如你想打印一条 debug 级别的日志,那么只需要输入 logd,然后按下 Tab 键,就会帮你自动补全一条完整的打印语句。输入 logi,然后按下 Tab 键,会自动补全一条 info 级别的打印日志。输入 logw,按下 Tab 键,会自动补全一条 warn 级别的打印日志,以此类推。另外,由于 Log 的所有打印方法都要求传入一个 tag 参数,每次写一遍显然太过麻烦。这里还有一个小技巧,我们在onCreate()方法的外面输入 logt,然后按下 Tab 键,这时就会以当前的类名作为值自动生成一个 TAG 常量,如下所示:

复制代码
public class HelloWorldActivity extends AppCompatActivity {
private static final String TAG = "HelloWorldActivity";
...
}

除了快捷输入之外,logcat 中还能很轻松地添加过滤器,你可以在图 1.32 中看到我们目前所有的过滤器。

第一行代码:Android(2nd ed)(18):开始启程——你的第一行Android代码 1.4.2

图 1.32 logcat 中的过滤器

目前只有 3 个过滤器,Show only selected application 表示只显示当前选中程序的日志, Firebase 是谷歌提供的一个分析工具,我们可以不用管它,No Filters 相当于没有过滤器,会把所有的日志都显示出来。那可不可以自定义过滤器呢?当然可以,我们现在就来添加一个过滤器试试。

点击图 1.32 中的 Edit Filter Configuration,会弹出一个过滤器配置界面。我们给过滤器起名叫 data,并且让它对名为 data 的 tag 进行过滤,如图 1.33 所示。

第一行代码:Android(2nd ed)(18):开始启程——你的第一行Android代码 1.4.2

图 1.33 过滤器配置界面

点击 OK,你就会发现你已经多出了一个 data 过滤器。当你点击这个过滤器的时候,你会发现刚才在onCreate()方法里打印的日志没了,这是因为 data 这个过滤器只会显示 tag 名称为 data 的日志。你可以尝试在onCreate()方法中把打印日志的语句改成Log.d("data", "onCreate execute"),然后再次运行程序,你就会在 data 过滤器下看到这行日志了。

不知道你有没有体会到使用过滤器的好处,可能现在还没有吧。不过当你的程序打印出成百上千行日志的时候,你就会迫切地需要过滤器了。

看完了过滤器,再来看一下 logcat 中的日志级别控制吧。logcat 中主要有 5 个级别,分别对应着上一节介绍的 5 个方法,如图 1.34 所示。

第一行代码:Android(2nd ed)(18):开始启程——你的第一行Android代码 1.4.2

图 1.34 logcat 中的日志级别

当前我们选中的级别是 verbose,也就是最低等级。这意味着不管我们使用哪一个方法打印日志,这条日志都一定会显示出来。而如果我们将级别选中为 debug,这时只有我们使用 debug 及以上级别方法打印的日志才会显示出来,以此类推。你可以做一下试验,当你把 logcat 中的级别选中为 info、warn 或者 error 时,我们在onCreate()方法中打印的语句是不会显示的,因为我们打印日志时使用的是Log.d()方法。

日志级别控制的好处就是,你可以很快地找到你所关心的那些日志。相信如果让你从上千行日志中查找一条崩溃信息,你一定会抓狂的吧。而现在你只需要将日志级别选中为 error,那些不相干的琐碎信息就不会再干扰你的视线了。

最后我们再来看一下关键字过滤。如果使用过滤器加日志级别控制还是不能锁定到你想查看的日志内容的话,那么还可以通过关键字进行进一步的过滤,如图 1.35 所示。

第一行代码:Android(2nd ed)(18):开始启程——你的第一行Android代码 1.4.2

图 1.35 关键字输入框

我们可以在输入框里输入关键字的内容,这样只有符合关键字条件的日志才会显示出来,从而能够快速定位到任何你想查看的日志。另外还有一点需要注意,关键字过滤是支持正则表达式的,有了这个特性,我们就可以构建出更加丰富的过滤条件。

关于 Android 中日志工具的使用我就准备讲到这里,logcat 中其他的一些使用技巧就要靠你自己去摸索了。今天你已经学到了足够多的东西,我们来总结和梳理一下吧。

评论

发布