前言可能大数人看到这个标题觉得DEBUG时在Xcode里就能看到App运行时的打印在控制台里的日志,这还需要专门写篇文章介绍下吗?其实不然,有些场景下我们还是需要实时查看App运行时的日志的,比如测试人员拿着测试机发现问题了过来找你,这时候要看运行时日志,又不能重新DEBUG安装版本,怎么办?再比如,收到并点击推送的通知后启动App,这时候要查看我们打印的日志,怎么办?还有,弄过VoIP推送同学的都知道,这个推送可以直接启动我们的App,如果要观察启动过程中的日志,这该怎么办?总不能只能连着Xcode运行时,我们才能看到日志吧。有同学可能会说,把日志写入文件,启动完成后,再把文件拷贝出来看不就完了,好了,这篇文章你一定要认真看完。 查看日志的几种方式 这里我们说的日志是输出到控制台的日志,就是我们常用的NSLog输出的日志。其实大部分App会集成日志模块,比如CocoaLumberjack,还有以前笔者学习Runloop时也造过这样的轮子SSLogger。利用第三方日志模块查看日志不在本文讨论范围内,本文只讨论如何实时查看输出在console控制台的日志。 还一种也是Xcode,通过Window->Devices打开devices界面,选择我们的手机,也能看到手机中运行的进程输出的日志。如图: 上面这两种方式大部分iOS开发应该都知道,不知道的就该检讨下了。 使用libimobiledevice工具查看日志libimobiledevice 是一系列工具集,有很多实用的工具,截屏,安装ipa文件等等。我们要介绍的是idevicesyslog这个工具,这个工具可以把手机中的日志输出到我们指定的文件里。
安装libimobiledevice很简单,在命令行输入: brew instll libimobiledevice --HEAD 注意,需要加上 –HEAD 选项,如果不加,安装是老版本,不支持iOS10的手机,所以安装时,需要加上 –HEAD 选项, 如图: 如果电脑上没有brew,请看这里:brew安装传送门
1)将设备日志重定向到文件 idevicesyslog >> iphone.log & 该命令是将日志导入到iphone.log这个文件,并且是在后台执行。 2)用tail -f和grep查看log tail -f iphone.log tail -f iphone.log | grep 'QQ’ # 查看包含QQ的行 如图: 使用Mac自带的控制台应用查看iOS日志 在用过各种办法查看App日志后,还是觉得苹果系统自带的工具用起来最方便,不用安装,不用命令行,傻瓜式操作,非常方便。但是还有好多同学不知道怎么用,这里简单的给大家介绍下。 右侧输出的日志不仅有我们自己的App还有其他进程的日志,怎么过滤?非常简单,选中一条我们的日志,在进程名字上右键,选择显示进程名,然后就只会显示我们App的日志。如果显示的列名中没有进程名,我们可以在其他列名上右键,在弹出的菜单中勾选上进程就可以了。如图显示QQ打印出的日志: 日志还是有点多,看不清,怎么办,在右上方输入自己想要过滤出的日志,然后就会只显示你想要的,如图显示QQ打印出的日志中所有带有“***”的行 是不是很简单方便 总结本文介绍的两种实时查看日志的方法能让我们在一些不能连上Xcode调试的场景下查看日志,对于定位解决问题很有帮助。idevicesyslog 工具使用方法更灵活,可以用grep查找更符合自己想要的日志;控制台应用查看日志更方便一点。 |
|