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 ...
随机推荐
- struts.xml中的intercepter
1. http://weizhilizhiwei.iteye.com/blog/1005210 Struts2 的核心——拦截器[Interceptor] 2. http://blog.csdn.ne ...
- [转] iOS TableViewCell 动态调整高度
原文: http://blog.csdn.net/crayondeng/article/details/8899577 最近遇到了一个cell高度变化的问题,在找解决办法的时候,参考了这篇文章,觉得不 ...
- cocos2dx 资源合并.
文件合并之前 文件合并之后 吐槽 我们项目比较奇葩, ui用cocostudio做, 这项光荣的任务由美术接手. 这个美术是个新手, 经过我长时间的观察, 她似乎不用怎么画画. 至少在很长一段时间里, ...
- nodejs读取本地txt文件并输出到浏览器
var fs = require('fs'); var chrome=""; //同步执行 function tongbu(){ var data =fs.readFileSync ...
- underscorejs-invoke学习
2.13 invoke 2.13.1 语法: _.invoke(list, method, *args) 2.13.2 说明: 每个list属性值都执行method方法,根据method方法返回一个数 ...
- js 遇到 Permission denied to access property ***
在开发过程 子页面刷新父页面时,中遇到的 Permission denied to access property *** 问题,处理如下: 这是一个跨域的问题,其实很简单 就是子页面所在域名不在父页 ...
- jQuery实现按Enter键触发事件?
按Enter触发 $(function(){ document.onkeydown = function(e){ var ev = document.all ? window.event : e; ) ...
- jquery easy ui 学习 (2) customtools window
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Python自动化运维之18、Python操作 MySQL、pymysql、SQLAchemy
一.MySQL 1.概述 什么是数据库 ? 答:数据的仓库,和Excel表中的行和列是差不多的,只是有各种约束和不同数据类型的表格 什么是 MySQL.Oracle.SQLite.Access.MS ...
- python模块之time和datetime
33.python模块之time 1.>>> time.time() 1470900847.8458395 ==>时间戳,从1970年到现在. 2.> ...