1.4 前行必备,掌握日志工具的使用
通过上一节的学习,你已经成功创建了你的第一个Android程序,并且对Android项目
的目录结构和运行流程都有了一定的了解。现在本应该是你继续前行的时候,不过我想在这
里给你穿插一点内容,讲解一下Android中日志工具的使用方法,这对你以后的Android开
发之旅会有极大的帮助。
1.4.1 添加LogCat到你的Eclipse
日志在任何项目的开发过程中都会起到非常重要的作用,在Android项目中如果你想要
查看日志则必须要使用LogCat工具。当你第一次在Eclipse中运行Android项目的时候,
Eclipse会提醒你一次是否要添加LogCat这个工具。如果你现在还没有添加上的话,我这里
教你一下如何手动添加LogCat到你的Eclipse中。
点击Eclipse导航栏中的Window→Show View→Other,会弹出一个Show View对话框。
你在Show View对话框中展开Android目录,会看到有一个LogCat的子项,如图1.19所示。
图 1.19
然后选中LogCat,点击OK,这样你就成功将LogCat添加到Eclipse中了。
1.4.2 使用Android的日志工具Log
既然LogCat已经添加完成,我们来学习一下如何使用Android的日志工具吧。Android
中的日志工具类是Log(android.util.Log),这个类中提供了如下几个方法来供我们打印日志。
1. Log.v()
这个方法用于打印那些最为琐碎的,意义最小的日志信息。对应级别verbose,是
Android日志里面级别最低的一种。
2. Log.d()
这个方法用于打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助
的。对应级别debug,比verbose高一级。
3. Log.i()
这个方法用于打印一些比较重要的数据,这些数据应该是你非常想看到的,可以帮
你分析用户行为的那种。对应级别info,比debug高一级。
4. Log.w()
这个方法用于打印一些警告信息,提示程序在这个地方可能会有潜在的风险,最好
去修复一下这些出现警告的地方。对应级别warn,比info高一级。
5. Log.e()
这个方法用于打印程序中的错误信息,比如程序进入到了catch语句当中。当有错
误信息打印出来的时候,一般都代表你的程序出现严重问题了,必须尽快修复。对应级
别error,比warn高一级。
其实很简单,一共就五个方法,当然每个方法还会有不同的重载,但那对你来说肯定不
是什么难理解的地方了。我们现在就在HelloWorld项目中试一试日志工具好不好用吧。
打开HelloWorldActivity,在onCreate()方法中添加一行打印日志的语句,如下所示:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hello_world_layout);
Log.d("HelloWorldActivity", "onCreate execute");
}
Log.d方法中传入了两个参数,第一个参数是tag,一般传入当前的类名就好,主要用于
对打印信息进行过滤。第二个参数是msg,即想要打印的具体的内容。
现在可以重新运行一下HelloWorld这个项目了,仍然是右击HelloWorld项目→Run As→Android Application。等程序运行完毕,可以看到LogCat中打印信息如图1.20所示。
图 1.20
其中你不仅可以看到打印日志的内容和Tag名,就连程序的包名、打印的时间以及应用
程序的进程号都可以看到。如果你的LogCat中并没有打印出任何信息,有可能是因为你当
前的设备失去焦点了。这时你只需要进入到DDMS视图,在Devices窗口中点击一下你当前
的设备,打印信息就会出来了。
另外不知道你有没有注意到,你的第一行代码已经在不知不觉中写出来了,我也总算是
交差了。
1.4.3 为什么使用Log而不使用System.out
我相信很多的Java新手都非常喜欢使用System.out.println()方法来打印日志,不知道你
是不是也喜欢这么做。不过在真正的项目开发中,是极度不建议使用System.out.println()方
法的!如果你在公司的项目中经常使用这个方法,就很有可能要挨骂了。
为什么System.out.println()方法会这么遭大家唾弃呢?经过我仔细分析之后,发现这个
方法除了使用方便一点之外,其他就一无是处了。方便在哪儿呢?在Eclipse中你只需要输
入syso,然后按下代码提示键,这个方法就会自动出来了,相信这也是很多Java新手对它
钟情的原因。那缺点又在哪儿了呢?这个就太多了,比如日志打印不可控制、打印时间无法
确定、不能添加过滤器、日志没有级别区分……
听我说了这些,你可能已经不太想用System.out.println()方法了,那么Log就把上面所
说的缺点全部都做好了吗?虽然谈不上全部,但我觉得Log已经做得相当不错了。我现在就
来带你看看Log和LogCat配合的强大之处。
首先在LogCat中是可以很轻松地添加过滤器的,你可以在图1.21中看到我们目前所有
的过滤器。
图 1.21
目前只有两个过滤器,All messages过滤器也就相当于没有过滤器,会把所有的日志都
显示出来。com.test.helloworld过滤器是我们运行HelloWorld项目时自动创建的,点击这个
过滤器就可以只看到HelloWorld程序中打印的日志。那可不可以自定义过滤器呢?当前可
以,我们现在就来添加一个过滤器试试。
点击图1.21中的加号,会弹出一个过滤器配置界面。我们给过滤器起名叫data,并且让
它对名为data的Tag进行过滤,如图1.22所示。
图 1.22
点击OK,你就会发现你已经多出了一个data过滤器,当你点击这个过滤器的时候,你
会发现刚才在onCreate()方法里打印的日志没了,这是因为data这个过滤器只会显示Tag名
称为data的日志。你可以尝试在onCreate()方法中把打印日志的语句改成Log.d("data",
"onCreate execute"),然后再次运行程序,你就会在data过滤器下看到这行日志了。
不知道你有没有体会到使用过滤器的好处,可能现在还没有吧。不过当你的程序打印出
成百上千行日志的时候,你就会迫切地需要过滤器了。
看完了过滤器,再来看一下LogCat中的日志级别控制吧。LogCat中主要有5个级别,
分别对应着我在上一节介绍的5个方法,如图1.23所示。
图 1.23
当前我们选中的级别是verbose,也就是最低等级。这意味着不管我们使用哪一个方法
打印日志,这条日志都一定会显示出来。而如果我们将级别选中为debug,这时只有我们使
用debug及以上级别方法打印的日志才会显示出来,以此类推。你可以做下试验,如果你把
LogCat中的级别选中为info、warn或者error时,我们在onCreate()方法中打印的语句是不会
显示的,因为我们打印日志时使用的是Log.d()方法。
日志级别控制的好处就是,你可以很快地找到你所关心的那些日志。相信如果让你从上
千行日志中查找一条崩溃信息,你一定会抓狂的吧。而现在你只需要将日志级别选中为error,
那些不相干的琐碎信息就不会再干扰你的视线了。
关于Android中日志工具的使用我就准备讲到这里,LogCat中其他的一些使用技巧就要
靠你自己去摸索了。今天你已经学到了足够多的东西,我们来总结和梳理一下吧。
通过上一节的学习,你已经成功创建了你的第一个Android程序,并且对Android项目
的目录结构和运行流程都有了一定的了解。现在本应该是你继续前行的时候,不过我想在这
里给你穿插一点内容,讲解一下Android中日志工具的使用方法,这对你以后的Android开
发之旅会有极大的帮助。
1.4.1 添加LogCat到你的Eclipse
日志在任何项目的开发过程中都会起到非常重要的作用,在Android项目中如果你想要
查看日志则必须要使用LogCat工具。当你第一次在Eclipse中运行Android项目的时候,
Eclipse会提醒你一次是否要添加LogCat这个工具。如果你现在还没有添加上的话,我这里
教你一下如何手动添加LogCat到你的Eclipse中。
点击Eclipse导航栏中的Window→Show View→Other,会弹出一个Show View对话框。
你在Show View对话框中展开Android目录,会看到有一个LogCat的子项,如图1.19所示。
图 1.19
然后选中LogCat,点击OK,这样你就成功将LogCat添加到Eclipse中了。
1.4.2 使用Android的日志工具Log
既然LogCat已经添加完成,我们来学习一下如何使用Android的日志工具吧。Android
中的日志工具类是Log(android.util.Log),这个类中提供了如下几个方法来供我们打印日志。
1. Log.v()
这个方法用于打印那些最为琐碎的,意义最小的日志信息。对应级别verbose,是
Android日志里面级别最低的一种。
2. Log.d()
这个方法用于打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助
的。对应级别debug,比verbose高一级。
3. Log.i()
这个方法用于打印一些比较重要的数据,这些数据应该是你非常想看到的,可以帮
你分析用户行为的那种。对应级别info,比debug高一级。
4. Log.w()
这个方法用于打印一些警告信息,提示程序在这个地方可能会有潜在的风险,最好
去修复一下这些出现警告的地方。对应级别warn,比info高一级。
5. Log.e()
这个方法用于打印程序中的错误信息,比如程序进入到了catch语句当中。当有错
误信息打印出来的时候,一般都代表你的程序出现严重问题了,必须尽快修复。对应级
别error,比warn高一级。
其实很简单,一共就五个方法,当然每个方法还会有不同的重载,但那对你来说肯定不
是什么难理解的地方了。我们现在就在HelloWorld项目中试一试日志工具好不好用吧。
打开HelloWorldActivity,在onCreate()方法中添加一行打印日志的语句,如下所示:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hello_world_layout);
Log.d("HelloWorldActivity", "onCreate execute");
}
Log.d方法中传入了两个参数,第一个参数是tag,一般传入当前的类名就好,主要用于
对打印信息进行过滤。第二个参数是msg,即想要打印的具体的内容。
现在可以重新运行一下HelloWorld这个项目了,仍然是右击HelloWorld项目→Run As→Android Application。等程序运行完毕,可以看到LogCat中打印信息如图1.20所示。
图 1.20
其中你不仅可以看到打印日志的内容和Tag名,就连程序的包名、打印的时间以及应用
程序的进程号都可以看到。如果你的LogCat中并没有打印出任何信息,有可能是因为你当
前的设备失去焦点了。这时你只需要进入到DDMS视图,在Devices窗口中点击一下你当前
的设备,打印信息就会出来了。
另外不知道你有没有注意到,你的第一行代码已经在不知不觉中写出来了,我也总算是
交差了。
1.4.3 为什么使用Log而不使用System.out
我相信很多的Java新手都非常喜欢使用System.out.println()方法来打印日志,不知道你
是不是也喜欢这么做。不过在真正的项目开发中,是极度不建议使用System.out.println()方
法的!如果你在公司的项目中经常使用这个方法,就很有可能要挨骂了。
为什么System.out.println()方法会这么遭大家唾弃呢?经过我仔细分析之后,发现这个
方法除了使用方便一点之外,其他就一无是处了。方便在哪儿呢?在Eclipse中你只需要输
入syso,然后按下代码提示键,这个方法就会自动出来了,相信这也是很多Java新手对它
钟情的原因。那缺点又在哪儿了呢?这个就太多了,比如日志打印不可控制、打印时间无法
确定、不能添加过滤器、日志没有级别区分……
听我说了这些,你可能已经不太想用System.out.println()方法了,那么Log就把上面所
说的缺点全部都做好了吗?虽然谈不上全部,但我觉得Log已经做得相当不错了。我现在就
来带你看看Log和LogCat配合的强大之处。
首先在LogCat中是可以很轻松地添加过滤器的,你可以在图1.21中看到我们目前所有
的过滤器。
图 1.21
目前只有两个过滤器,All messages过滤器也就相当于没有过滤器,会把所有的日志都
显示出来。com.test.helloworld过滤器是我们运行HelloWorld项目时自动创建的,点击这个
过滤器就可以只看到HelloWorld程序中打印的日志。那可不可以自定义过滤器呢?当前可
以,我们现在就来添加一个过滤器试试。
点击图1.21中的加号,会弹出一个过滤器配置界面。我们给过滤器起名叫data,并且让
它对名为data的Tag进行过滤,如图1.22所示。
图 1.22
点击OK,你就会发现你已经多出了一个data过滤器,当你点击这个过滤器的时候,你
会发现刚才在onCreate()方法里打印的日志没了,这是因为data这个过滤器只会显示Tag名
称为data的日志。你可以尝试在onCreate()方法中把打印日志的语句改成Log.d("data",
"onCreate execute"),然后再次运行程序,你就会在data过滤器下看到这行日志了。
不知道你有没有体会到使用过滤器的好处,可能现在还没有吧。不过当你的程序打印出
成百上千行日志的时候,你就会迫切地需要过滤器了。
看完了过滤器,再来看一下LogCat中的日志级别控制吧。LogCat中主要有5个级别,
分别对应着我在上一节介绍的5个方法,如图1.23所示。
图 1.23
当前我们选中的级别是verbose,也就是最低等级。这意味着不管我们使用哪一个方法
打印日志,这条日志都一定会显示出来。而如果我们将级别选中为debug,这时只有我们使
用debug及以上级别方法打印的日志才会显示出来,以此类推。你可以做下试验,如果你把
LogCat中的级别选中为info、warn或者error时,我们在onCreate()方法中打印的语句是不会
显示的,因为我们打印日志时使用的是Log.d()方法。
日志级别控制的好处就是,你可以很快地找到你所关心的那些日志。相信如果让你从上
千行日志中查找一条崩溃信息,你一定会抓狂的吧。而现在你只需要将日志级别选中为error,
那些不相干的琐碎信息就不会再干扰你的视线了。
关于Android中日志工具的使用我就准备讲到这里,LogCat中其他的一些使用技巧就要
靠你自己去摸索了。今天你已经学到了足够多的东西,我们来总结和梳理一下吧。