本文主要是介绍Android logcat log输出控制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Android logcat log输出控制
- 常用logcat
- logcat针对tag打印控制
- log buffer大小设置
- log黑白名单
- log设置查看
- 输出到文件
- logcat指定格式输出
- 常用logk命令打印kernel log
- log buffer
- logcat和logk进程的启动
常用logcat
清除log
logcat -c
指定pid的log输出
logcat --pid=<pid>
logcat针对tag打印控制
Android log 通过系统属性persist.log.tag 和persist.log.tag.xxx决定相关log的指定等级及以上才可以写入logd,xxx是指某个tag,不过这个系统属性只能设置5个,而且TAG长度不能太长。
禁止所有log tag 输出,设置所有log S等级及以上的log才能输出,S等级最高,V等级最低
setprop persist.log.tag S
使能所有log tag 输出,设置所有log V等级及以上的log才能输出
setprop persist.log.tag V
//禁止log tag 为 mytag 输出,设置log tag 为 mytag S等级及以上的log才能输出
setprop persist.log.tag.mytag S
//使能log tag 为 mytag 输出,设置log tag 为 mytag V等级及以上的log才能输出
setprop persist.log.tag.mytag V
使用组合1:只打开log tag为audio的log:
setprop persist.log.tag Ssetprop persist.log.tag.audio V
使用组合2:只禁止log tag为audio的log:
setprop persist.log.tag.audio S
附:等级有VERBOSE,DEBUG,INFO,WARN,ERROR,FATA,SILENT
log buffer大小设置
永久设置所有缓冲区大小为8M,重启生效
setprop persist.logd.size 8M
暂时设置所有缓冲区大小为4M,立即生效,但是ACC OFF/ON后失效
logcat -G 4M
暂时设置main缓冲区大小为4M,立即生效
logcat -b main -G 4M
log buffer大小查看
logcat -g
log黑白名单
logd丢失log会先删除黑名单的log,然后删除普通log。最后还不够的话再删除白名单的log。 设置黑白名单。可以对UID,PID设置,也可以UID/PID一起设置。设置黑名单,前缀~
指令 | 说明 |
---|---|
logcat -P ~520881 ~/78883 ~52189/8883 | 对UID 520881,对PID78883,对UID/PID 52189/8883 设置黑名单。 |
logcat -P 520881/666 | 对UID/PID 520881/666设置白名单 |
logcat -p | 查看黑白名单 |
log设置查看
指令 | 说明 |
---|---|
logcat -k | 查看当前允许输出的log等级 |
logcat -g | og buffer大小查看 |
logcat -s “log_tag1” “log_tag2” | 只允许某些log_tag输出 |
logcat “log_tag1:s” “log_tag2:s” | 不允许某些log_tag输出 |
logcat -b xxx | 查看xxxbuffer 的 log,logbuffer环形缓冲区在system/core/include/log/log.h中log_id中定义。有main,radio,event,system,crash,security,error,perf,kernel |
logcat -b main | 查看main buffer log ,是我们平时正常使用的buffer, |
logcat -b crash | 程序crash相关的log |
输出到文件
logcat -v threadtime -f /data/log/log -r2048 -n 49 //-v :threadtime格式输出,-f指创建文件 /data/log/log,-r2048指每个文件大小20485k,-n 49 创建49+1个文件
logcat指定格式输出
设置输出格式的日志消息。默认是短暂的格式。支持的格式列表
logcat -v <format>
格式 | 说明 |
---|---|
brief | 显示优先级/标记和过程的PID发出的消息(默认格式) |
process | 只显示PID |
tag | 只显示优先级/标记 |
raw | 显示原始的日志消息,没有其他元数据字段 |
time | 调用显示日期、时间、优先级/标签和过程的PID发出消息 |
threadtime | 调用显示日期、时间、优先级、标签遗迹PID TID线程发出的消息 |
long | 显示所有元数据字段与空白行和单独的消息 |
常用logk命令打印kernel log
指令 | 说明 |
---|---|
logk -e 0 | 关闭 kernel log 输出,user版默认为0 |
logk -e 1 | 使能 kernel log 输出 |
logk -p | 查看 kernel log 状态 |
logk -f 文件 | 打印 kernel log 到文件 |
log buffer
logd读取logdw时会对超过对应Android 原生 id(main,system etc)buffer大小进行裁剪,buffer大小在LogBuffer.cpp中"persist.logd.size","ro.logd.size"系统属性设置。该系统属性在device/fsl/tamago_1t(other)/BoardConfig.mk中ADDITIONAL_BUILD_PROPERTIES += ro.logd.size=2048k设置。
logcat和logk进程的启动
logcat输出log到文件,系统启动时会在init.rc: service elog_service /system/bin/logcat -v threadtime -f /data/log/log -r2048 -n 49(-v :threadtime格式输出,-f指创建文件 /data/log/log,-r2048指每个文件大小20485k,-n 49 创建49+1个文件)启动system/bin/logcat进程,该进程会一直在后台运行并读取logdr socket 的log。当有一个文件log写满的时候logcat.cpp中rotateLogs()函数就会对这些log文件进行循环滚动更新,由于log文件有0~49个,所以每次循环49次,因此循环次数#define DEFAULT_MAX_ROTATED_LOGS 49,kernel log则由logk负责输出不过log来源从kmsg文件中读取,init.rc中启动logk指令 service logk_service /system/bin/logk -f /data/log/kernel_log,logk.cpp中rotateLogs循环更新个数为4,所有输出kernellog0~4。
这篇关于Android logcat log输出控制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!