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
logcat使用的更多相关文章
- Logcat使用总结
不建议用System.out.println(), 因为使用syso导致日志打印不可控制.打印时间无法确定.不能添加过滤器.日志没有级别区分等为题. Android中的日志工具类是Log(androi ...
- 制作bat脚本,抓取Android设备logcat
::bat制作抓取Android设备的logcat,并保存以时间命名的txt文件至设备目录 1 @ECHO off adb wait-for-device ECHO 正在连接设备 adb logcat ...
- android的logcat详细用法
Android日志系统提供了记录和查看系统调试信息的功能.日志都是从各种软件和一些系统的缓冲区中记录下来的,缓冲区可以通过 logcat 命 令来查看和使用. 使用logcat命令 你可以用 logc ...
- 解决eclipse中logcat不显示log的问题
调试程序需要打印一些消息出来,logcat不好用的话就很麻烦了.这个问题折腾了好久,为啥就是不出来呢? 上网找了很多解决办法: 重启eclipse 重启adb 重启logcat ......等等好多 ...
- Android开发学习——开发调试工具-DDMS应用,ADB进程,Logcat
DDMS -- Dalvik debug monitor service 调试监控服务 对模拟器进行相关配置. ADB进程 Android debug bridge 建立eclipse和 ...
- 关于android的日志输出&LogCat
android提供了自己的log输出api-->位于android.util.Log这个类中. 这个类比较常用的打印日志的方法有5个,这5个方法都会把日志打印到LogCat中: Log.v(ta ...
- Android下读取logcat的信息
有时我们需要在程序执行进程中遇到一些异常,需要收集一logcat的信息,android下就可以使用以下方法获取: private static String getLogcatInfo(){ Stri ...
- Android Studio -修改LogCat的颜色
Android Studio -修改LogCat的颜色 author:Kang,Leo weibo:http://weibo.com/kangyi 效果图 设置 Preference->Edit ...
- logcat 基本使用
adb logcat -c //清空以前的日志 adb logcat -v time > d:/sss.log //将当前日志输出到d盘的sss.log中 sss.log不 ...
- unity游戏在logcat中过滤一些不需要的Log
adb logcat | grep -v "UnityEngineDebug.cpp\|:\s*$" | grep Unity 意义: 1. grep -v "过滤条件1 ...
随机推荐
- oracle解析xml完成版第二次修改
其实XML字符串就好像是ORACLE中的外部表,因此Oracle对 解析XML字符串一些规则要求非常严格.XML字符串提供的数据就是一张表,所以Oracle必须提供跟 xml数据一致的列头 示例一 S ...
- Swift - 15 - 导入Foundation使用更多字符串功能
//: Playground - noun: a place where people can play import Foundation var str = "Hello, playgr ...
- 7 Reverse Integer(数字反转Easy)
题目意思:int数字反转 考虑:越界问题 class Solution { public: int reverse(int x) { ; while(x){ ans=ans*+x%; x=x/; } ...
- oracle触发器应用
首先给大家推荐两篇我看后的博文,我已经内容转载过来: 1.对触发器的讲解 本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建 ...
- C语言内存对齐原理
一.什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这 ...
- linux c数据库备份第二版
#想知道更多请查看第一版"linux c数据库备份第一版" #include<sys/types.h> #include<sys/wait.h> #incl ...
- ctags使用详解(转载)
一. ctags是干什么的 ctags的功能:扫描指定的源文件,找出其中所包含的语法元素,并将找到的相关内容记录下来. 我用的是Exuberant Ctags,在Windows上使用,就 ...
- 转:聊聊并发(八)——Fork/Join框架介绍
1. 什么是Fork/Join框架 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架. 我们再通过 ...
- java四种创建对象的方法
1.用new语句创建对象,这是最常见的创建对象的方法. 2.运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance ...
- ISO14443-4块传输协议的实现
ISO1444-3块传输协议主要用于应用数据的传输,其实现如下: unsigned char Apdu(unsigned char *comm,unsigned short len,unsigned ...