做android有些日子了,只是对主要的logcat的具体使用方法还是非常模糊,今天有空,学习一下。

logcat能够在adb中使用,也能够直接在命令行下使用。
 
logcat [options] [filterspecs]
logcat的选项包含:
  -s                      默认设置过滤器,如指定'*:s'.
  -f <filename>    输出到文件,默认情况是标准输出.
  -r [<kbytes>]    循环log的字节数(默觉得16),须要-f.
  -n <count>       设置循环log的最大数目,默认是4
  -v <format>      设置log的打印格式,  <format> 是以下的一种:
                            brief process tag thread raw time threadtime long.
  -c                      清除全部log并退出.
  -d                     得到全部log并退出 (不堵塞).
  -g                     得到环形缓冲区的大小并退出.
  -b <buffer>      请求不同的环形缓冲区('main' (默认), 'radio', 'events').
  -B                     输出log到二进制中.

1.  日志过滤器设置
  每个输出的Android日志信息都有一个标签和它的优先级.
  日志的标签是系统部件原始信息的一个简要的标志。(比方:“View”就是查看系统log的标签,“RFID_HAL”就是查看RFID的HAL层log的标签)。
  优先级有下列集中,是依照从低到高顺利排列的:
  V — Verbose (lowest priority)
  D — Debug
  I — Info
  W — Warning
  E — Error
  F — Fatal
  S — Silent (highest priority, on which nothing is ever printed)无log打印

在执行logcat的时候在前两列的信息中你就能够看到 logcat 的标签列表和优先级别,它是这样标出的:<priority>/<tag>.
  以下是一个logcat输出的样例,它的优先级就似乎I,标签就是ActivityManage:
  I/ActivityManager(  585): Starting activity: Intent { action=android.intent.action...}
  
  过滤器语句依照以下的格式描写叙述:tag:priority, tag 表示是标签,priority是表示标签log的最低等级,
  你能够在过滤器中多次写tag:priority。
  
  比如:adb logcat ActivityManager:I MyApp:D *:S  或者 adb logcat -s ActivityManager:I MyApp:D
  上面表达式的最后的元素 *:S ,,是设置全部的标签为”silent”,全部日志仅仅显示有”ActivityManager”和“MyApp”的,用 *:S 的还有一个用处是能够确保日志输出的时候是依照过滤器的说明限制的,也让过滤器也作为一项输出写到日志中。
  
2.  log输出格式设置
  能够改动日志的输出格式,所以能够显示出特定的元数据域。能够通过 -v 选项得到格式化输出日志的相关信息。
  
  brief — Display priority/tag and PID of originating process (the default format).
  process — Display PID only.
  tag — Display the priority/tag only.
  thread — Display process:thread and priority/tag only.
  raw — Display the raw log message, with no other metadata fields.
  time — Display the date, invocation time, priority/tag, and PID of the originating process.
  long — Display all metadata fields and separate messages with a blank lines.
  样例:
  brief -- P/tag (876): message  (默认格式)
  process -- (876): message
  tag -- P/tag: message
  thread -- P/tag( 876:0x37c) message
  raw -- message
  time -- 09-08 05:40:26.729 P/tag ( 876): message
  threadtime -- 09-08 05:40:26.729 876 892 P/tag : message
  long -- [ 09-08 05:40:26.729 876:0x37c P/tag ] message

3.  查看可用日志缓冲区
  Android日志系统有循环缓冲区,并非全部的日志系统都有默认循环缓冲区。
  [adb] logcat [-b <buffer>]
  radio —  查看和radio telephony相关的缓冲区
  events —  查看和事件相关的的缓冲区
  main —   查看基本的日志缓冲区
  
4. log源代码头文件
 4.1 java
   其实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这3种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”为开头。
  
  4.2 FW and HAL
     JNI层代码需包括头文件frameworks/base/include/utils/Log.h,实际上这个头文件include了HAL层代码使用的头文件system/core/include/cutils/log.h
     //#define  NDEBUG
     //#define  LOG_NDEBUG  0
     #define  LOG_TAG  "RFID_HAL"
   #include <cutils/log.h>
   
   这里对能够输出Verbose级别的log的设置,逻辑上有点反,实际上在log.h文件開始就有例如以下定义:
   #ifndef LOG_NDEBUG
   #ifdef NDEBUG
   #define LOG_NDEBUG 1
   #else
   #define LOG_NDEBUG 0
   #endif
   #endif
   
   #ifndef LOG_TAG
   #define LOG_TAG NULL
   #endif
   默认情况下,LOG_NDEBUG = 0
   
   以下是和Verbose主要的log相关的宏定义:
   #ifndef LOGV
   #if LOG_NDEBUG
   #define LOGV(...)   ((void)0)
   #else
   #define LOGV(...) ((void)LOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__))// 仅仅有在为0的情况下这个宏才有意义
   #endif
   #endif
   
   #define CONDITION(cond)     (__builtin_expect((cond)!=0, 0))
   
   #ifndef LOGV_IF
   #if LOG_NDEBUG
   #define LOGV_IF(cond, ...)   ((void)0)
   #else      // 仅仅有在为0的情况下这个宏才有意义
   #define LOGV_IF(cond, ...) /
       ( (CONDITION(cond)) /
       ? ((void)LOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__)) /
       : (void)0 )
   #endif
   #endif
   
   ...
   #ifndef IF_LOGV
   #if LOG_NDEBUG
   #define IF_LOGV() if (false)
   #else
   #define IF_LOGV() IF_LOG(LOG_VERBOSE, LOG_TAG)
   #endif
   #endif

综上,代码中假设须要打开VERBOSE级别的log,仅仅须要定义#define  LOG_NDEBUG  0或者干脆不要定义;假设须要关闭VERBOSE级别的log,能够定义#define  LOG_NDEBUG  1或者#define  NDEBUG,二者选一就可以。
   
參考文件:
   http://blog.csdn.net/czbever/archive/2010/09/27/5910640.aspx
   http://jiahuhuan.blog.163.com/blog/static/13024124620099179491291/
   http://www.javaeye.com/topic/477112

logcat使用的更多相关文章

  1. Logcat使用总结

    不建议用System.out.println(), 因为使用syso导致日志打印不可控制.打印时间无法确定.不能添加过滤器.日志没有级别区分等为题. Android中的日志工具类是Log(androi ...

  2. 制作bat脚本,抓取Android设备logcat

    ::bat制作抓取Android设备的logcat,并保存以时间命名的txt文件至设备目录 1 @ECHO off adb wait-for-device ECHO 正在连接设备 adb logcat ...

  3. android的logcat详细用法

    Android日志系统提供了记录和查看系统调试信息的功能.日志都是从各种软件和一些系统的缓冲区中记录下来的,缓冲区可以通过 logcat 命 令来查看和使用. 使用logcat命令 你可以用 logc ...

  4. 解决eclipse中logcat不显示log的问题

    调试程序需要打印一些消息出来,logcat不好用的话就很麻烦了.这个问题折腾了好久,为啥就是不出来呢? 上网找了很多解决办法: 重启eclipse 重启adb 重启logcat ......等等好多 ...

  5. Android开发学习——开发调试工具-DDMS应用,ADB进程,Logcat

    DDMS --  Dalvik debug monitor service    调试监控服务 对模拟器进行相关配置. ADB进程   Android debug bridge  建立eclipse和 ...

  6. 关于android的日志输出&LogCat

    android提供了自己的log输出api-->位于android.util.Log这个类中. 这个类比较常用的打印日志的方法有5个,这5个方法都会把日志打印到LogCat中: Log.v(ta ...

  7. Android下读取logcat的信息

    有时我们需要在程序执行进程中遇到一些异常,需要收集一logcat的信息,android下就可以使用以下方法获取: private static String getLogcatInfo(){ Stri ...

  8. Android Studio -修改LogCat的颜色

    Android Studio -修改LogCat的颜色 author:Kang,Leo weibo:http://weibo.com/kangyi 效果图 设置 Preference->Edit ...

  9. logcat 基本使用

    adb logcat -c    //清空以前的日志 adb logcat -v time >  d:/sss.log       //将当前日志输出到d盘的sss.log中  sss.log不 ...

  10. unity游戏在logcat中过滤一些不需要的Log

    adb logcat | grep -v "UnityEngineDebug.cpp\|:\s*$" | grep Unity 意义: 1. grep -v "过滤条件1 ...

随机推荐

  1. SQL In的替换

    前2天在搞SQL的的时候,发现其中有很多in的操作,诸如:id in(1,2,3)或id in(select id from table……),这个对SQL来说并不是最好的选择,执行效率是偏低的[它执 ...

  2. Web学习资源及手册查询整理

    入门了解html.css.js.jQuery:http://www.w3school.com.cn/, bootstrap.nodejs.php.jQuery入门:http://www.runoob. ...

  3. 虾米loop 摇头代码

    .head{ position: absolute; -webkit-animation: shake 1s infinite; -webkit-transform-origin: center bo ...

  4. nuc900 nand flash mtd 驱动

    nuc900 nand flash mtd 驱动,请参考! /* * Copyright © 2009 Nuvoton technology corporation. * * Wan ZongShun ...

  5. jQuery简单导航示例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. dede密码忘记 的修改方法

    DEDE是使用md5加密,但是,它是显示32位md5加密码从第6位开始的20位 进入数据库  找到数据表dede_admin 我们只要把pwd对应的md5加密码修改为c3949ba59abbe56e0 ...

  7. PHP 设计模式之观察者模式 (转载)

    介绍      现在有两派,有的人建议使用设计模式,有的人不建议使用设计模式!这就向写文章一样,有的人喜欢文章按照套路走,比如叙事性质的文章,时间,地点,人物,事件.而有的人喜欢写杂文或者散文,有的人 ...

  8. jquery easy ui 学习 (7) TreeGrid Actions

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. 安卓环境搭建(1)hellow world

    本系列适合0基础的人员,因为我就是从0开始的,此系列记录我步入Android开发的一些经验分享,望与君共勉!作为Android队伍中的一个新人的我,如果有什么不对的地方,还望不吝赐教. 在开始Andr ...

  10. Python自动化运维之12、面向对象进阶

    上一篇<面向对象基础>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公 ...