文档章节

Android程序调试–LogCat按照日志信息级别进行输出和过滤

liuher
 liuher
发布于 2014/07/21 21:03
字数 1261
阅读 32196
收藏 1

Android程序调试–LogCat

无论什么样的程序开发过程中,出现错误都是不可避免的,一般情况下,语法错误会被开发环境检测到,并能及时的提示我们错误的位置以及修改的方法,但是逻辑错误就不是那么容易被发现了,通常逻辑错误的定位和分析是一件非常困难的事情。

所以在学习Android过程中,继学习它的程序结构,写了HelloWorld和一些简单的界面布局程序之后,我选择研究一下它的调试工具。LogCat就是其中一个。LogCat是用来获取系统日志信息的工具,它可以捕获的信息包括Dalvik虚拟机产生的信息,进程信息,ActivityManager信息,PackagerManager信息,Android运行时信息和应用程序信息等等。

我们可以在打开Eclipse之后,选择Window –> Show View ->Other菜单,然后在Android->LogCat中选择LogCat,这样LogCat便会在Eclipse的下方区域出现了。

其中,在LogCat的右上方的5个字母分别表示了5种不同类型的日志信息(并以不同颜色加以区分,级别越高,颜色越突出):

1. [V]:详细(Verbose)信息,输出颜色为黑色

2. [D]:调试(Debug)信息,输出颜色是蓝色

3. [I]:通告(Info)信息,输出颜色为绿色

4. [W]:警告(Warn)信息,输出颜色为橙色

5. [E]:错误(Error)信息,输出颜色为红色,这里错误信息的级别最高,其次是警告信息,然后是通知信息和调试信息,级别最低的是详细信息。

6.[assert],新版本加入的。

在LogCat中,我们可以通告这5个字母图标选择要显示的信息类型,级别高于所选类型的信息也会在LogCat中显示,但级别低于所选类型的信息则不会被显示。

在Android程序调试过程中,首先要引入android.util.Log包,然后使用用来记录详细信息的Log.v()、用来记录调试信息的Log.d()、用来记录通告信息的Log.i()、用来记录警告信息的Log.w()、用来记录错误信息的Log.e()这样五个函数在程序中设置“日志点”。这些函数的第一个参数是日志标签TAG(就是在你要测试的位置需要一个常量用来标记,标记的名字就是所谓的日志标签),第二个参数是实际的信息内容。每当程序运行到我们设置的“日志点”时,应用程序的日志信息便被发送到LogCat中,我们就可以根据“日志点”显示的信息与预期我们在函数中设置的信息内容是否一致来判断程序是否存在错误,这样就能根据“日志点”来迅速找到错误的“出事地点”了。

在下面的程序中,演示了Log类的具体使用方法:

package wt.relativeLayout;

 

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;

import android.util.Log;

 

public class RelativeLayout extends Activity {

final static String TAG = "LOGCAT";

private TextView tv = null;

private EditText et = null;

private Button btn1 = null;

private Button btn2 = null;

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        tv = (TextView)findViewById(R.id.label);

        et = (EditText)findViewById(R.id.entry);

        btn1 = (Button)findViewById(R.id.cancel);

        btn2 = (Button)findViewById(R.id.ok);

        tv.setText(R.string.name);

        btn1.setText(R.string.button1);

        btn2.setText(R.string.button2);

 

        Log.v(TAG, "This is Verbose");

        Log.d(TAG, "This is Debug");

        Log.i(TAG, "This is Info");

        Log.w(TAG, "This is Warn");

        Log.e(TAG, "This is Error");

    }

}

程序运行后,LogCat捕获得到应用程序发送的日志信息,显示结果如下图:


通过结果我们发现,即使我们事先选择了某个特定的日志信息的级别,产生的日志信息还是有很多,需要我们逐条去阅读,给我们带来很大的麻烦。这时我们就要用到一个LogCat提供的“过滤”功能了,在右上角的“+”号和“-”号,分别是添加和删除过滤器。我们可以根据日志信息的标签(Tag)、产生日志的进程编号(Pid)或者信息等级(Level),对显示的日志内容进行过滤。在实际使用中,我们最好为每一个类声明一个字符串常量TAG,这样在Logcat中我们可以容易区分不同的类的日志了。

下面使用在LogCat右上角的“+”号,添加一个名为LogcatFilter的过滤器,并设置过滤条件为“标签=LOGCAT”,下图为过滤器的具体设置方法:


 

过滤器设置好后,LogcatFilter过滤后的日志信息如下图,这样,无论什么类型的日志信息,属于哪个进程,只要标签为LOGCAT,都将显示在LogcatFilter内。


 

运行测试后,对logCat中的log通过配置l过滤器进行过滤

这样,调试工作就完成了。

 

© 著作权归作者所有

liuher
粉丝 2
博文 13
码字总数 3438
作品 0
武汉
私信 提问
加载中

评论(1)

scimence
scimence
赞!
如何过滤 adb logcat 命令的输出

本文介绍如何在 shell 命令行中过滤 adb logcat 输出的几个小技巧。 开发当中经常看到别人的 log 如洪水般瞬间刷满了屏幕,对自己有用的信息都被淹没了,影响心情也影响效率。下面是几个我所...

雨焰
2013/07/24
8.5K
1
Windows环境下Android Studio系列5—日志调试

定制Logcat调试日志字体颜色 Logcat是Android开发调试中最常用的一个工具,Android Studio 1.2.2中默认对Logcat调试的颜色已经有所区分,但如果你想要定制自己的调试日志对应的字体颜色,以便...

一配
2015/07/15
10.6K
1
android的adb详解(多设备时adb调用)

2011-07-25 10:29:15 在多设备(模拟器)时,想要直接用logcat查看其中一台的状态,或者直接把应用安装到目标设备上时,需要指定设备号。 adb devices 这个指令可以得到当前设备的序列号(s...

ruigal
2012/07/26
441
0
Android Log日志调试(android.utl.log)

Android调试要通过模拟器运行,或者直接USB远程连接到一部手机调试。即使在不关闭模拟进行调试时候,也要经过编译、apk打包、上传apk、运行apk的过程,时间也不短,所以应该在程序固定一次运...

长平狐
2013/01/05
5.9K
0
Android 调试桥(adb)是多种用途的工具

Android 调试桥 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 可以通过下列几种方法加入adb: 在设备上运行shell命令 通过端口转发来管理模拟器或设备...

迷糊
2009/10/11
4.8K
2

没有更多内容

加载失败,请刷新页面

加载更多

移动开发中的 Web:WebView、WebKit、JSCore、Web 优化、热修复、跨平台、Native、Hybrid……

移动开发领域近年来已经逐渐告别了野蛮生长的时期,进入了相对成熟的时代。而一直以来 Native 和 Web 的争论从未停止,通过开发者孜孜不倦的努力,Web 的效率和 Native 的体验也一直在寻求着...

编辑部的故事
26分钟前
14
0
MySQL8.0.17 - Multi-Valued Indexes 简述

本文主要简单介绍下8.0.17新引入的功能multi-valued index, 顾名思义,索引上对于同一个Primary key, 可以建立多个二级索引项,实际上已经对array类型的基础功能做了支持 (感觉官方未来一定...

阿里云官方博客
今天
11
0
make4.1降级 make-3.81、2错误

在编译 make-3.82 的时候出现如下错误提示 glob/glob.c:xxx: undefined reference to `__alloca'` 修改 /glob/glob.c // #if !defined __alloca && !defined __GNU_LIBRARY__ # ifdef __GNUC......

Domineering
今天
18
0
Rainbond集群的安装和运维的原理

本文将解读Rainbond集群的安装和运维的原理,使用户基本了解Rainbond的安装机制和运维重点,便于用户搭建大型Rainbond集群。 1.Rainbond集群节点概述 1.1 节点分类 属性 类型 说明 manage 管...

好雨云帮
今天
11
0
好程序员大数据学习路线分享UDF函数

1.为什么需要UDF? 1)、因为内部函数没法满足需求。 2)、hive它本身就是一个灵活框架,允许用自定义模块功能,如可以自定义UDF、serde、输入输出等。 2.UDF是什么? UDF:user difine fun...

好程序员官方
今天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部