Chinaunix首页 | 论坛 | 博客
  • 博客访问: 456379
  • 博文数量: 155
  • 博客积分: 2954
  • 博客等级: 少校
  • 技术积分: 1000
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-12 22:00
文章分类

全部博文(155)

文章存档

2014年(2)

2013年(5)

2012年(10)

2011年(33)

2010年(105)

我的朋友

分类: Java

2010-07-15 17:36:40

logcat是Android中一个命令行工具,可以用于得到程序的log信息。

logcat使用方法如下所示:
logcat [options] [filterspecs]
logcat的选项包括:
  -s                    设置过滤器,例如指定 '*:s'
  -f    输出到文件,默认情况是标准输出。
  -r []   Rotate log every kbytes. (16 if unspecified). Requires -f
  -n       Sets max number of rotated logs to , default 4
  -v      设置log的打印格式,   是下面的一种:
                         brief process tag thread raw time threadtime long

  -c                   清除所有log并退出
  -d                   得到所有log并退出 (不阻塞)
  -g                   得到环形缓冲区的大小并退出
  -b      请求不同的环形缓冲区    ('main' (默认), 'radio', 'events')
  -B                   输出log到二进制中。

过滤器的格式是一个这样的串:
  [:priority]

其中 表示log的component, tag (或者使用 * 表示所有) , priority 如下所示:
  V    Verbose
  D    Debug
  I    Info
  W    Warn
  E    Error
  F    Fatal
  S    Silent


事实上logcat的功能 是由Android的类android.util.Log决定的,在程序中log的使用方法如下所示:
Log.v() -------------------- VERBOSE
Log.d() -------------------- DEBUG
Log.i() -------------------- INFO
Log.w() -------------------- WARN
Log.e() -------------------- ERROR
以上log的级别依次升高,DEBUG信息应当只存在于开发中,INFO, WARN,ERROR这三种log将出现在发布版本中。

对于JAVA类,可以声明一个字符串常量TAG,Logcat可以根据他来区分不同的log,例如在计算器(Calculator)的类中,定义如下所示:

public class Calculator extends Activity {
/* ...... */
    private static final String LOG_TAG = "Calculator";
    private static final boolean DEBUG  = false;
    private static final boolean LOG_ENABLED = DEBUG ? Config.LOGD : Config.LOGV;
/* ...... */
   由此,所有在Calculator中使用的log,均以"Calculator"为开头。

例如使用方法如下所示:
# logcat &
< 得到一个log片段 >
W/KeyCharacterMap(  130): No keyboard for id 0
W/KeyCharacterMap(  130): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
I/ActivityManager(   52): Displayed activity com.android.contacts/.DialtactsContactsEntryActivity: 983 ms
I/ARMAsse mbler(   52): generated scanline__00000077:03545404_00000A04_00000000 [ 29 ipp] (51 ins) at [0x25c978:0x25ca44] in 1764174 ns
I/ARMAssembler(   52): generated scanline__00000077:03515104_00000001_00000000 [ 46 ipp] (65 ins) at [0x25d1c8:0x25d2cc] in 776789 ns
D / dalvikvm (   130 ): GC freed 834 objects / 81760 bytes in 63ms
D/dalvikvm(   52): GC freed 10588 objects / 425776 bytes in 94ms

其中W/I/D 表示log的级别,“dalvikvm ”“ARMAssembler ”等是不同组件(component)的名称,后面括号里面的数字 表示了发出log的进程号。

使用技巧:
1.使用logcat &在后台运行
2.使用-d得到所有log
3.使用-f或者重定向(>和>>)输出到文件
4.使用-s设置过滤器,得到想要的log。

当然,最重要的还是在程序中加入恰当的log.

 

许多初次接触Android开发的朋友会遇到调试的问题,如何能够根据错误提示迅速的找到“出事地点呢”?在Eclipse+ADT的开发环境中没有好的直接跟踪对象内容的方法,通过使用android.util.Log类可以帮助你自己查找错误和打印系统日志消息。它是一个进行日志输出的API,我们在Android 程序中可以随时为某一个对象插入一个Log,然后在DDMS中观察Logcat的输出是否正常。

  android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() 。根据首字母对应VERBOSE,DEBUG,INFO, WARN,ERROR。当我们在DDMS进行调试时他们的区别并不大,只是显示的颜色不同,但通过Logcat的过滤器我们可以过滤显示某类的,一般对于执行错误的断点,下在Log.e比较合适。但是Android开发网根据规范建议VERBOSE,DEBUG信息应当只存在于开发中,最终版本只可以包含 INFO, WARN,ERROR这三种日志信息。在实际使用中,我们最好为每一个类声明一个字符串常量TAG,这样在Logcat中我们可以容易区分不同的类的日志。例如:
  private static final String TAG = "MyActivity";

  接下来我们就可以用Log随心所欲的观察Android代码中的每个细节:Log.e(TAG, "android123.com.cn"); 但是要记住这个Log类的参数都是String类型的。下面是DDMS中的Logcat截图:

logcat android

 

 

最后介绍一下Android的Log工具LogCat。

首先在Eclipse中选择Windows > Show View > Other... > Android > LogCat,确定后会出现LogCat显示框,用户添加的Log将会在这里显示。
 
使用时直接在代码中插入“Log.i("info","this is a log");”,那么在执行到该语句时,LogCat显示框中将出现“this is a log”。
详细的用法请参考Android文档。
阅读(2777) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~