iOS 测试 [libimobiledevice 优化] iOS 系统日志获取工具 idevicesyslog 功能优化

Baozhida · 2017年03月22日 · 最后由 bauul 回复于 2017年03月24日 · 2321 次阅读

接着[libimobiledevice 优化] iOS Crash 日志获取工具 idevicecrashreport 功能优化

既然 idevicecrashreport 添加了过滤的功能,尝试着 idevicesyslog 也添加过滤的功能。

修改的起因 java 代码执行 idevicesyslog 脚本,有管道符(|)不能直接调用

idevicesyslog | grep TuNiuApp

这条语句不能通过 java 的 Runtime.getRuntime().exec 直接执行,因为有管道符,但是 idevicesyslog 不是 shell 脚本,也不能当成参数执行。

需要获取全部日志,逐行分析。

Process p;
p = Runtime.getRuntime().exec("/usr/local/bin/idevicesyslog -u "+UDID);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = bufferedReader.readLine()) != null) {
    if(line.contains("XXX")){
         代码......  
    }
}

所以想办法,直接给 idevicesyslog 加过滤参数,使其输出过滤后的日志数据。

这个脚本比 idevicecrashreport 脚本修改难度大一些,还是因为不熟悉 c 语言。

改完之后的帮助命令

MAC$ idevicesyslog -h
Usage: idevicesyslog [OPTIONS]
Relay syslog of a connected device.

  -d, --debug       enable communication debugging
  -u, --udid UDID   target specific device by its 40-digit device UDID
  -g, --grep        grep string line by line
  -h, --help        prints usage information

Homepage: <http://libimobiledevice.org>
MACdeMacBook-Pro:ios-minicap-master MAC$ 

效果如下,直接输出过滤后的日志,这样通过 java 调用就方便多了。

MAC$ idevicesyslog -g TuNiuApp
[connected]
Mar 22 16:55:27 Bzd TuNiuApp(AppleJPEG)[3087] <Notice>: [0x10540c200] Created session
Mar 22 16:55:27 Bzd TuNiuApp(AppleJPEG)[3087] <Notice>: [0x105407c00] Created session
Mar 22 16:55:27 Bzd TuNiuApp(AppleJPEG)[3087] <Notice>: [0x105407c00] Releasing session

github

地址:https://github.com/baozhida/libimobiledevice

修改的文件 :https://github.com/baozhida/libimobiledevice/blob/master/tools/idevicesyslog.c

直接下载然后自己编译

Done

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 2 条回复 时间 点赞

我要试试看,哈哈。我一直直接命令行 grep 的。

恒温 回复

对啊,可以 grep 的啊,在 java 里面也可以直接拿到 grep 之后的结果,不过看起来这个逼格比较高👍

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册