首先讨论一下为什么使用Logcat而不使用Java中的System.out.println()方法来输出日志。 System.out.println()方法的优点就是使用很方便,只需要在Eclipse中输入syso,接着按下代码提示,这个方法就自动出来了。但是相比较Logcat,它的缺点也很明显,比如打印时间无法确定、打印内容无法控制、不能添加过滤器、日志级别没有区分等等。 今天重点讨论下log的级别区分,Android中的日志工具类Logcat(android.util.Log)提供了5种方法(对应5种级别),当然如有需要也可以进行重载,这里暂时不谈。先看这五种方法: 1.Log.v() 对应级别verbos,属于Android日志里面级别最低的一种。从名字可以看出,这中方法用于打印哪些琐碎的的、意义最小的日志信息(显然数量较多)。 2.Log.d() 对应级别debug,比verbose高一级。这种方法用于打印调试的相关信息,对调试程序和分析问题用很大帮助。 3.Log.i() 对应级别info,又比debug高一级。该方法用于打印一些比较重要的信息,这些信息有助于帮助分析用户行为。 4.Log.w() 对应级别warn,比info高一级。这个方法用于打印一些警告信息,提示程序在某些部分可能存在潜在的风险,例如程序流会堵死之类。最好将这些部分修复一下。 5.Log.e() 对应级别error,是级别最高的日志信息。这个方法用于打印程序中的错误信息,例如程序进入了catch语句当中(异常处理机制)。当出现E级别的日志信息的时候表示程序出现了很严重的错误,需要尽快修复。 细想一下,Log和Logcat配合之下会有怎样的效果,今天先说下给Logcat添加过滤器的方法。 正常刚打开Eclipse会有一个All message过滤器(其实就是没过滤),他会把所有的五种日志全部打印出来。另外当我们创建项目的时候,会产生一个com.xxx.xxx的过滤器,这是运行项目时自动创建的,点击这个过滤器就能看到这个项目的日志信息。这里我们尝试添加一个自定义的过滤器。 点击上图Logcat中的绿色+号,会弹出一个Filter Settings界面: 我们确定一个名字叫做data并且对名为data的Tag进行过滤的过滤器。最下面by log level默认为verbose,点击OK,会发现多出了一个过滤器: 选中这个过滤器的时候会发现刚刚还有很多的日志信息都没了,因为这个过滤器只显示Tag名为data的日志信息,很显然我这里并没有符合要求的。在当前的活动中的onCreate()方法中加入一行打印日志的语句: Log.d("data","onCreate execut"),Log.d方法传入了两个参数,第一个是Tag,一般传入当前的类名就可以,这里对打印信息进行初步过滤,无关类不会在这里显示,这里我们传入data;第二个参数是msg,也就是想要打印出来的内容。重新运行下程序,可以看到如下图的Logcat打印信息: 可以从中看到日志的内容和Tag名,还能看出程序的包名、打印时间以及应用程序的进程号。如果各项设置、代码都都确认无误,却仍然看不到Logcat中的打印信息,很有可能是当前的设备失去焦点了,可以在DDMS视图的Device窗口中点击激活当前设备。 然后注意一下上图右上角的日志级别控制器: 当前我们选择的级别是verbose,是前面讲过的五种级别中最低的等级,也就是说无论我们用Log.v()、Log.d()、Log.i()、Log.w()、log.e()当中的哪一种方法,这条日志都会被打印出来。以此类推,如果我们选择的控制级别是debug的话,那么使用Log.v是无法打印出这条语句的,只有用debug及以上的方法才可以。换个角度说,如果我们将当前的等级控制选择在info、warn或者error,那么上面的语句也不会打印出来,因为代码中我们使用的打印方法是Log.d()。通过日志控制可以很快的定位到我们需要的信息,有效地提高解决问题的效率,确实比System.out.println()好用多了。



































