zoukankan      html  css  js  c++  java
  • Shell脚本 | 抓取log文件

    在安卓应用的测试过程中,遇到 Crash 或者 ANR 后,想必大家都会通过 adb logcat 命令来抓取日志定位问题。如果直接使用 logcat 命令的话,默认抓取出的 log 文件包含安卓运行时产生的所有日志,给快速定位问题增加了时间成本。

    这个问题可以通过一个简单的 Shell 脚本来解决,依然只有区区 20 行左右的代码。

    脚本的编写思路是这样的:
    1、通过 date 命令获取当前时间并赋值给变量 "DATE",格式为 "year/month/day/hour/minutes/second"。这个时间戳可以用来给输出的 log 文件命名,每次运行脚本都是不同的时间点,从而达到区分 log 文件的目的;
    2、通过 read 命令读取包名;
    3、通过 read 命令读取日志的优先级(V/D/I/W/E/F/S),通常,我们需要的是 E(Error)级别的日志,也就是应用运行时产生的错误信息;
    4、运行 adb logcat 命令,将第 3 步中的优先级(priority)作为输入参数来过滤日志,缩小输出日志的大小和范围;
    5、运行 adb logcat 命令,不添加筛选条件,输出全部日志以防万一(参考第 7 步);
    6、Crash 的信息存在于 log 文件中,而 ANR 的问题则需要 traces 文件。通过 adb pull 命令可将手机中的 /data/anr/traces.txt 文件取出;
    7、运行 adb logcat -c 命令。每次获取 log 文件后,清空日志,保持测试机日志环境的干净,方便下次遇到问题后的日志获取和问题定位。

    以下为编写好的脚本:

    #!/bin/bash
    DATE=$(date "+%Y%m%d%H%M%S")
    # 读取包名
    echo -n "Please enter the package name:"
    read package_name
    # 日志级别:V/D/I/W/E/F/S
    echo -n "Please enter the priority of log:"
    read priority
    # log命令
    adb logcat -d -v long "AndroidRuntime:${priority}" "*:S" > ~/Desktop/logg/${package_name}${DATE}.log
    adb logcat -d -v threadtime > ~/Desktop/logg/${package_name}${DATE}_all.log
    # anr日志
    adb pull /data/anr/traces.txt ~/Desktop/logg/
    # 清空日志
    adb logcat -c
    

    运行示例:

    -> ./grab_log.sh 
    Please enter the package name:com.baidu.minivideo
    Please enter the priority of log:E
    /data/anr/traces.txt: 1 file pulled.
    

    欢迎关注微信公众号“测试开发Stack”,更多原创文章第一时间发布!

  • 相关阅读:
    「模板」 树套树
    [Luogu 3701] 「伪模板」主席树
    「模板」 可持久化平衡树
    「模板」 割点
    [Luogu 2596] ZJOI2006 书架
    省选有感。(不是游记)
    [Luogu 2604] ZJOI2010 网络扩容
    MySql聚簇索引与非聚簇索引的区别
    四层负载均衡和七层负载均衡的区别
    Redis利用Pipeline加速查询速度的方法
  • 原文地址:https://www.cnblogs.com/liushengchieh/p/10418224.html
Copyright © 2011-2022 走看看