使用 Android 的日志工具LogCat

摘要:
使用Android的日志工具LogCat==分割==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()方法中添加一行打印日志的语句,如下所示:protectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.hello_world_layout);Log.d("HelloWorldActivity","onCreateexecute");}Log.d方法中传入了两个参数,第一个参数是tag,一般传入当前的类名就好,主要用于对打印信息进行过滤。第二个参数是msg,即想要打印的具体的内容。现在可以重新运行一下HelloWorld这个项目了,仍然是右击HelloWorld项目→RunAs→AndroidApplication。等程序运行完毕,可以看到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目前只有两个过滤器,Allmessages过滤器也就相当于没有过滤器,会把所有的日志都显示出来。com.test.helloworld过滤器是我们运行HelloWorld项目时自动创建的,点击这个过滤器就可以只看到HelloWorld程序中打印的日志。那可不可以自定义过滤器呢?当前可以,我们现在就来添加一个过滤器试试。点击图1.21中的加号,会弹出一个过滤器配置界面。我们给过滤器起名叫data,并且让它对名为data的Tag进行过滤,如图1.22所示。图1.22点击OK,你就会发现你已经多出了一个data过滤器,当你点击这个过滤器的时候,你会发现刚才在onCreate()方法里打印的日志没了,这是因为data这个过滤器只会显示Tag名称为data的日志。你可以尝试在onCreate()方法中把打印日志的语句改成Log.d("data","onCreateexecute"),然后再次运行程序,你就会在data过滤器下看到这行日志了。不知道你有没有体会到使用过滤器的好处,可能现在还没有吧。不过当你的程序打印出成百上千行日志的时候,你就会迫切地需要过滤器了。看完了过滤器,再来看一下LogCat中的日志级别控制吧。LogCat中主要有5个级别,分别对应着我在上一节介绍的5个方法,如图1.23所示。图1.23当前我们选中的级别是verbose,也就是最低等级。这意味着不管我们使用哪一个方法打印日志,这条日志都一定会显示出来。而如果我们将级别选中为debug,这时只有我们使用debug及以上级别方法打印的日志才会显示出来,以此类推。你可以做下试验,如果你把LogCat中的级别选中为info、warn或者error时,我们在onCreate()方法中打印的语句是不会显示的,因为我们打印日志时使用的是Log.d()方法。日志级别控制的好处就是,你可以很快地找到你所关心的那些日志。相信如果让你从上千行日志中查找一条崩溃信息,你一定会抓狂的吧。而现在你只需要将日志级别选中为error,那些不相干的琐碎信息就不会再干扰你的视线了。

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 所示。

使用 Android 的日志工具LogCat第1张

图 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 中看到我们目前所有 的过滤器。

使用 Android 的日志工具LogCat第2张

图 1.21

目前只有两个过滤器,All messages 过滤器也就相当于没有过滤器,会把所有的日志都 显示出来。com.test.helloworld 过滤器是我们运行 HelloWorld 项目时自动创建的,点击这个 过滤器就可以只看到 HelloWorld 程序中打印的日志。那可不可以自定义过滤器呢?当前可 以,我们现在就来添加一个过滤器试试。

点击图 1.21 中的加号,会弹出一个过滤器配置界面。我们给过滤器起名叫 data,并且让 它对名为 data 的 Tag 进行过滤,如图 1.22 所示。

使用 Android 的日志工具LogCat第3张

图 1.22

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

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

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

使用 Android 的日志工具LogCat第4张

图 1.23

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

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

免责声明:文章转载自《使用 Android 的日志工具LogCat》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Winform打包Exe Inno Setup反射, 动态导入, 创建一个元类下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

ubuntu18.04 安装新版本openssl

Shared=强制创建共享库。Zlib=使用Zlib库启用压缩。编译过程完成后,使用以下命令安装OpenSSL:sudomakeinstallOpenSSL安装在“/usr/local/ssl”目录中。新的OpenSSL二进制文件将从“/usr/local/ssl/lib”目录加载库文件。转到'/etc/ld。so.conf.d”目录,并创建一个新的配置文件...

字符串解压缩类库(zip、GZIP、QuickLz、snappy、lzf、jzlib)介绍

它旨在提供高压缩速度和合理的压缩比=-1){out.write;}字节[]未压缩=输出。到字节数组();--返回提取字符串的字节数组。介绍使用预先选择的解压缩类库-GZIP压缩字符串=“这是一个用于测试的字符串”;ByteArrayOutputStreamout=新的ByteArray输出流();GZipOutputStreamgout=newGZipOut...

grep多条件查找"与","或"

这里以jps命令为例jps查看全部的jvm进程"与"查找下图是所有jvm进程如果想查找256891ThriftServer服务用"与"查找可以理解为是条件查找命令:jps|grep-eer|grep-eT"或"查找方法一:grep-E'A|B'和grep-eA-eB方法二:egrep'A|B'方法三:awk'/A|B/'...

JS获取当前时间

如果有更好的方法,请提出建议。进一步解释如下:varmyDate=newDate();我的日期。getYear();//获取当前年份(2位数)myDate getFullYear();//获取完整的年份(4位数,1970-???=0)||);}//----------------------------------------------//日期格式//格式...

Json对象转Ts类

其次,Json是一种轻量级的数据交换格式。在前端和后端之间的数据交互过程中,后端接口返回Json格式的数据,前端需要使用相应的Ts类对象来接收它。此时,如果后端提供样本数据或现有接口返回的Json格式数据,是否有方法帮助我们从Json格式数据生成Ts类?介绍了三个主要功能。1.查看Json对应的Ts类,将要格式化的Json字符串复制粘贴到中间编辑区域。单击右...

Crontab详细用法-定时任务详解

LWC“八个字符,有效范围为0-31个月的整数:可以出现”,-*/“四个字符,无效范围为1-12或JAN DECDayofWeek:可以出现”。-*/?因为月日和周日将相互影响。例如,在“分钟”字段中使用5,20表示它将在每分钟的5和20分钟触发一次。50:表示它只能出现在周日和月日域中。如果在DayofWeek域中使用5L,这意味着它将在最后一个星期四触发...