本文主要是介绍Logcat使用指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Logcat使用指南
adb logcat 命令格式 : adb logcat [选项] [过滤项]
其中“选项”和“过滤项”在[]中, 说明这是可选的
推荐进入的方法是:
adb shell 回车
logcat xxxx
logcat的“选项”:
- "-s"选项 : 设置输出日志的标签, 只显示该标签的日志;
- "-v"选项 : 设置日志的输出格式, 注意只能设置一项; "-c"选项 : 清空所有的日志缓存信息;
- "-d"选项 : 将缓存的日志输出到屏幕上, 并且不会阻塞; "-t"选项 : 输出最近的几行日志, 输出完退出, 不阻塞; "-g"选项 : 查看日志缓冲区信息;
- "-b"选项 : 加载一个日志缓冲区, 默认是 main;
- "-B"选项 : 以二进制形式输出日志;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "onCreate: debug");
Log.i(TAG, "onCreate: info");
Log.e(TAG, "onCreate: error");
}
1. 操作符:-s:
logcat -s ddd (筛选ddd标签的内容)
结果:
shell@ha3g:/ $ logcat -s ddd
--------- beginning of system
--------- beginning of main
D/ddd ( 7506): onCreate: debug
I/ddd ( 7506): onCreate: info
E/ddd ( 7506): onCreate: error
这里继续操作,如果出现了ddd标识的log,那么仍旧会继续显示。ctrl+c 可以让其中断。
2. 操作符:-g
logcat -g 查看log缓冲区
结果:
130|shell@ha3g:/ $ logcat -g
main: ring buffer is 2Mb (414Kb consumed), max entry is 5120b, max payload is 4076b
system: ring buffer is 256Kb (66Kb consumed), max entry is 5120b, max payload is 4076b
3. 操作符:-d
logcat -d 一次性显示之前的日志内容,显示完毕后就结束停止了。这里我利用-s的组合进行筛选之前被ddd标记的log,输出结果后终端:
shell@ha3g:/ $ logcat -d -s ddd
--------- beginning of system
--------- beginning of main
D/ddd ( 7506): onCreate: debug
I/ddd ( 7506): onCreate: info
E/ddd ( 7506): onCreate: error
这里可以选择缓冲区类型,规则是这样的:logcat -d [缓冲区类型]。
比如上面没有加类型参数,所以显示了一个system和main,缓冲区有:
system缓冲区 - 与系统相关的日志信息;
radio缓冲区 - 广播电话相关的日志信息;
events缓冲区 - 事件相关的日志信息;
main缓冲区 - 主的缓冲区,上面显示的就是main缓冲区中的内容。上面的命令和下面的等价:
logcat -s ddd -d main
130|shell@ha3g:/ $ logcat -s ddd -d main
--------- beginning of main
--------- beginning of system
D/ddd ( 7506): onCreate: debug
I/ddd ( 7506): onCreate: info
E/ddd ( 7506): onCreate: error
4. 操作符:-c
清空之前的所有log,和as中log面板中的垃圾桶是一个作用。
logcat -c
5. 操作符:-v
logcat -v 设置log的格式。这里的格式只能设置下列的某一种,不可设置多种格式。
1.time 添加log的时间,注意这里的时间没有年份。
130|shell@ha3g:/ $ logcat -v time -d -s ddd
--------- beginning of system
--------- beginning of main
12-10 16:49:33.731 D/ddd ( 7506): onCreate: debug
12-10 16:49:33.731 I/ddd ( 7506): onCreate: info
12-10 16:49:33.731 E/ddd ( 7506): onCreate: error
2.brief 默认的log输出样式,上文中的展示的都是这种格式。
shell@ha3g:/ $ logcat -v brief -d -s ddd
--------- beginning of system
--------- beginning of main
D/ddd ( 7506): onCreate: debug
I/ddd ( 7506): onCreate: info
E/ddd ( 7506): onCreate: error
3.thread 带(进程id:线程id)的log信息:
shell@ha3g:/ $ logcat -v thread -d -s ddd
--------- beginning of system
--------- beginning of main
D( 7506: 7506) onCreate: debug
I( 7506: 7506) onCreate: info
E( 7506: 7506) onCreate: error
4.tag 仅仅带有tag的log信息:
shell@ha3g:/ $ logcat -v tag -d -s ddd
--------- beginning of system
--------- beginning of main
D/ddd : onCreate: debug
I/ddd : onCreate: info
E/ddd : onCreate: error
5.long 完全体的log信息:
130|shell@ha3g:/ $ logcat -v long -d -s ddd
--------- beginning of system
--------- beginning of main
[ 12-10 16:49:33.731 7506: 7506 D/ddd ]
onCreate: debug
[ 12-10 16:49:33.731 7506: 7506 I/ddd ]
onCreate: info
[ 12-10 16:49:33.731 7506: 7506 E/ddd ]
onCreate: error
6.raw 精简样式,仅仅输出info信息,连tag都没有:
130|shell@ha3g:/ $ logcat -v raw -d -s ddd
--------- beginning of main
--------- beginning of system
onCreate: debug
onCreate: info
onCreate: error
7.process 优先级样式,这个样式的tag在最后:
shell@ha3g:/ $ logcat -v process -d -s ddd
--------- beginning of main
--------- beginning of system
D( 7506) onCreate: debug (ddd)
I( 7506) onCreate: info (ddd)
E( 7506) onCreate: error (ddd)
6.操作符 -t
输出最近的n条log信息,输出后中断命令立刻结束。
logcat -t 1000 (输出最近的1000条信息)
测试:
shell@ha3g:/ $ logcat -d -t 1000 -s ddd
--------- beginning of system
--------- beginning of main
D/ddd ( 7506): onCreate: debug
I/ddd ( 7506): onCreate: info
E/ddd ( 7506): onCreate: error
过滤选项
其实在上面我们就已经用过了过滤选项-s了,他可以用来过滤某个标签,下面详细说下具体的过滤规则。
可以过滤的选项,级别,tag,关键字。
1.级别
V : Verbose (明细);
D : Debug (调试);
I : Info (信息);
W : Warn (警告);
E : Error (错误);
F : Fatal (严重错误);
S : Silent(Super all output) (最高的优先级, 记录前所未有的错误);
此外,如果你查看的级别为d,那么d,i,w,e..的高级别log都能被看到,原则是低级别可以看到高级别的信息,高级别看不到低级别的信息。
过滤级别的写法:logcat *:级别,比如:logcat *:E 或locat *:e (不区分大小写)
shell@ha3g:/ $ logcat *:E
--------- beginning of main
E/MultiWindowConverter( 3016): getApplicationName is error:Starting kale.myapplication
E/PersonaManagerService( 3016): inState(): stateMachine is null !!
E/ddd ( 7506): onCreate: error
上面的*:E中的星号表示通配符,可以写任何tag,比如:ddd
2.tag
130|shell@ha3g:/ $ logcat ddd:E *:S
--------- beginning of main
--------- beginning of system
E/ddd ( 7506): onCreate: error
这里需要注意,输入了tag后就必须添加 *:S的尾缀,否则出错。
我们仍旧可以扩展这个格式,进行多个级别和tag的筛选
logcat ddd:E ddd:D *:S (过滤tag为ddd的两个级别的日志)
130|shell@ha3g:/ $ logcat ddd:E ddd:D *:S
--------- beginning of main
--------- beginning of system
D/ddd ( 7506): onCreate: debug
I/ddd ( 7506): onCreate: info
E/ddd ( 7506): onCreate: error
3.关键字
我们可以通过grep来过滤关键字,这样更加灵活。
写法:logcat | grep 关键字
比如:logcat | grep ddd(只能识别小写的ddd)
logcat | grep i ddd(无论是DDD,ddD,ddd...都可以被识别)
130|shell@ha3g:/ $ logcat -d | grep ddd
D/ddd ( 7506): onCreate: debug
I/ddd ( 7506): onCreate: info
E/ddd ( 7506): onCreate: error
D/MainActivity( 7506): ║ ddd
grep是支持正则表达式的,所以可以用正则的写法。
用代码执行上面的命令行
AndroidManifest.xml添加读取权限
清除日志
try {
Runtime.getRuntime().exec("logcat -c");
} catch(Exception e) {}
// 获取日志
try {
ArrayList<String> commandLine = new ArrayList<String>();
commandLine.add( "logcat");
commandLine.add( "-d");
commandLine.add( "-v");
commandLine.add( "time");
commandLine.add( "-s"); //-s其实就是*:S
commandLine.add( "tag:W");
Process process = Runtime.getRuntime().exec( commandLine.toArray( new String[commandLine.size()]));
BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(process.getInputStream()), 1024);
String line = bufferedReader.readLine();
while ( line != null) {
log.append(line);
log.append("\n")
}
} catch ( IOException e) {
}
其实就是执行了 logcat -d -v time -s tag:W 这个命令
这篇关于Logcat使用指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!