logcat使用

做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

时间: 2024-10-09 22:43:13

logcat使用的相关文章

Eclipse ADT中的logcat不显示解决方法

Eclipse ADT中的logcat不显示解决方法: 1.在Eclipse界面中找到DDMS,然后找到device选项卡,在这个选项卡中选择reset adb,如果不行尝试方法2: 2.不用关闭eclipse和模拟器,在Android SDK的tools目录下有个 ddms.bat 批处理文件,运行这个文件可以启动DDMS,同时这里面有logcat,可以显示信息: 3.以上方法都不行,最终杀手锏就是重启eclipse,重启模拟器,记得在任务管理器中关闭adb.exe,这时应该就可以了. 4.用

LogCat查看Android运行日志

Android日志系统提供了记录和查看系统调试信息的功能. Android Log信息都有一个标签(Tag)和输出级别(Level).输出级别由低到高可以分为一下几个级别: V(Verbose) D(Debug) I(Info) W(Warn) E(Error) F(Fatal) S(Silent) 当使用eclipse开发时,我们可以方便的使用DDMS LogCat工具方便查看日志信息 代码调试过程中我们也可以使用LogCat工具方便得调试代码,程序中我们可以主动的写入Android工作日志,

logcat输出信息的问题

============问题描述============ 刚刚打开eclipse的时候,logcat是有信息显示的,我只要随便过滤一下logcat,然后再把过滤去掉,logcat就跟踪不了了,什么信息都没有了 .重启adb没用,重启eclipse是可以,但是跟踪一次就重启一次也太傻比了吧 ============解决方案1============ 打开logcat,点击下Devices里的设备试试 ============解决方案2============ 选择ddms,然后再选中你的设备,这样

Eclipse调试的时候LogCat自动消失,什么原因?

============问题描述============ LogCat出来的信息,几秒之后就自动消失了. 每次还没来得及看错误信息,它就消失了! 有人说是因为内容太多了的原因, 但是好像不是,我自己的System.out才几条信息,也是出来几秒就自动消失了! 还有一个问题,就是eclipse识别不到真机,必须开着360手机助手/或者是豌豆荚才能识别到真机.有人说可能是360手机助手和豌豆荚的原因,我试着把两个都卸载了,驱动也卸载重装了,还是不行,识别不了,adb.exe我也去网上下载了一个替换掉

怎么停止LogCat的自动滚动?

============问题描述============ 真机调试时,想看看所有的调试消息,但是Logcat老是自动滚动,就是有新的调试消息时,就会自动向上滚动,把我现在看的滚没了,真是不胜其烦,但是又找不到关闭自动滚动的方法,啊啊啊,烦死了... ============解决方案1============ 在LogCat窗口右侧有一个+符号,新建Log Filter,设置好by Log Tag的值,这个值要与Log输出的Tag值一样,这样这个新建的窗口里面就只会显示你的Log了 =======

LogCat不显示的问题。

问题描述 我调试安卓程序的时候经常遇到这样的情况,关了模拟器之后重新开的话LOG就显示了,但是一遇到这种情况关了再开很费时间的.不知道这是什么原因.. 而旁边的LogCat(deprecated)是一直显示信息的. 解决方案1 adb kill-server adb start-server 试试 解决方案2 打开DDMS , 在鼠标选中你的设备信息或者选择你正在debug的程序进程名看看LogCat是否出来log信息. 解决方案3 2楼正解,在DDMS的Devices区点一下你的设备就有log

Android中关于JNI 的学习(五)在C文件中使用LogCat

事实上,本文是在Peter Jerde的How much information can be stored by ordering 52 playing cards文章基础上翻译.改编和扩展而来的.当然这是经过Jerde本人首肯的. 注意本文方法并非最优,也没有完全利用所有的信息空间,只是简单的尝试. 有数字的地方就有信息.所以扑克牌中保存信息不是什么新鲜事. PDF文档点这里:下载 原文(英文)点这里:访问 这里有两个DEMO. 编码DEMO,解码DEMO 首先是"DEEP IN SHALL

logcat

logcat 一.简介 非常好用的日志工具 二.常见操作 1.选择对应级别的日志 2.添加日志过滤器filter 三.代码实例 建立日志filter 下面代码运行的日志结果 com.fry.logcatTest.MainActivity 1 package com.fry.logcatTest; 2 3 4 5 6 7 import android.app.Activity; 8 import android.content.Intent; 9 import android.os.Bundle;

logcat的条数设置

在软件默认设置下,logcat的缓存为1024,即logcat显示的条数有限,给程序的调试带来很大的不便,通过设置 logcat缓存的大小,可以增加logcat显示的条数,将程序调试的输出都可以打印出来. 在软件的安装根目录下,通过修改/bin/idea.properties文件可达到效果,修改内容如下 idea.cycle.buffer.size=1024000 其中1024000就是缓存的大小,可根据需要进行修改

5.1、Android Studio用Logcat编写和查看日志

Android Studio在Android Monitor中包含了一个logcat的tab,可以打印系统事件,比如垃圾回收发生时,实时打印应用消息. 为了显示需要的信息,你可以创建过滤器,更改需要显示多少信息.设置优先层,显示应用打印的消息,或者搜索日志.默认情况下.Logcat监视器显示最近运行的app的日志输出. 当一个应用抛出一个异常,Logcat监视器会显示一条相应的消息. 编写Log消息 可以打印如下日志: 1. Log.e(String,String)(输出错误) 2. Log.w