概述
总有些时候我们会遇到非必现场景,若未及时抓取日志,可能为时已晚
抓取日志
抓取Logcat日志
这个是最简单的,使用-f重定向到一个文本文件即可,-v threadtime则显示详细时间和进程
# for logcat
{
log -t logcat_all "start logcat to file: $logcat_file"
/system/bin/logcat -v threadtime -f $logcat_file
} &
抓取Kmsg日志
通过抓取/proc/kmsg来完成
# for kmsg
{
log -t logcat_all "start kmsg to file: $kmsg_logfile"
cat /proc/kmsg >$kmsg_logfile
} &
抓取Top日志
通过抓取Top可以看到系统运行时,占用CPU的情况等等
# for top
{
while busybox true; do
top_newtime=$(/system/bin/date +%F_%H-%M-%S)
top_logfile=$logcat_dir/top_${top_newtime}.log && > $top_logfile
log -t logcat_all "start top to file: $top_logfile"
# 仅保留5个top日志文件
# 5*100*3=25分钟内的Top信息,避免Top日志文件过大
busybox rm -f $(busybox ls -1t ${logcat_dir}/top_* | busybox tail -n +6)
for n in $(busybox seq 1 100) ; do
# 每3秒打印一次top信息,并加入时间显示
top -m 5 -d 3 -t -n 1 | busybox awk '{now=strftime("%Y-%M-%d %T "); print now $0}' >>$top_logfile
echo >>$top_logfile
done
done
} &
为了方便分析结果,这里添加了详细时间,同时限定了Top输出大小(避免SD卡占用过快)
抓取vmstat日志
通过抓取vmstat日志,可分析的系统信息就更多了
# for vmstat
{
while busybox true; do
log -t logcat_all "start vmstat_ to file: $vmstat_logfile"
vmstat_newtime=$(/system/bin/date +%F_%H-%M-%S)
vmstat_logfile=$logcat_dir/vmstat_${vmstat_newtime}.log && > $vmstat_logfile
busybox rm -f $(busybox ls -1t ${logcat_dir}/vmstat_* | busybox tail -n +6)
/system/bin/vmstat -d 3 -n 100 | busybox awk '{now=strftime("%Y-%M-%d %T "); print now $0}' >$vmstat_logfile 2>&1
done
} &
同时也添加了详细的时间输出,方便分析
开机运行
在init.rc添加一个Service,当系统已正常启动完成时,执行抓取日志
service logcat_all /system/bin/logcat_wrapper.sh
class main
disabled
oneshot
on property:dev.bootcomplete=1
start logcat_all
其中,logcat_wrapper.sh内容如下:
#!/system/bin/sh
{
/system/bin/busybox nohup /system/bin/logcat_all.sh > /dev/null 2>&1 &
} &
使用nohup执行,避免脚本被杀死,而logcat_all.sh则见此链接 logcat_all.sh
最后
以上就是过时口红为你收集整理的android抓取日志,Android抓取所有日志的全部内容,希望文章能够帮你解决android抓取日志,Android抓取所有日志所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复