Android Log打印的正确姿势

大家对输出Log肯定不陌生吧, 任何语言任何程序都少不了Log读出, 程序交付前我们可以用它来调试code, 交付后我们可以用它来排除问题。记得当时用C写程序时,我们经常唱“print 大法好哎!print 大法好哎!print 大法好哎!”

Log 的输出是耗时的, 正确的Log打印可以提供工作效率,反之会带来副作用,所以要善用Log打印。有人把程序员分为五类,你可能多多少少有它们中一类或多类的影子。

  • IDD(IDE-Driven Development),也就是IDE驱动开发,几乎是初学者进入软件开发的殿堂的必经之路。IDE开发者屏蔽了很多细节,并且几乎不用配置(相对于 vim / emacs / sublime)就可以使用代码自动补全,代码跳转,搜索,以及签入签出等软件开发中将会使用到的几乎所有工作。
  • DDD(Debugger-Driven Development)
    DDD,面向调试器开发,是 IDD 依赖到一定程度的必然反应。这种开发模式的典型表现为:写出来的代码不知道对不对,从头到尾设置无数个断点,然后进入到调试模式,一个断点一个断点跟踪。发现一个问题,解决一个问题(也许引入一个新的问题),直到所有断点走数遍,所有遇到的问题被消灭,抹一抹头上的汗,心里骂上一句:妈的,这段代码老子(娘)终于调通了!
  • BDD(Bug-Driven Development)
    看到 BDD,也就是问题单驱动开发,相信大家都相视一笑。本来这里我想用 TDD(Ticket-Driven Development),更接近我的原意,为了不和 Test-Driven Development 混淆,故而只好改成 BDD。这可能是我们最熟悉的开发模式了 —— 在一个业务稳定的软件公司(甭管规模大小),勉力维护现有的代码,小心地添加新功能是多数程序员的主要职责。在这些公司里,与其说我们是工程师,不如说我们是补锅匠。看不懂代码?没关系,只要你会读日志(出错信息);解决不了问题?不打紧,能找到 workaround 把问题绕过去也可以,更有甚者,遇到神问题,看不懂,想不明,解不了,还没有 workaround,大笔一挥:not reproducible,就把问题关了,几个月半年后,说不定自己已经去补别的锅了。
  • RDD(Rat-race-game-Driven Development)
    RDD,老鼠赛跑驱动的开发,是指那些整个职业生涯都在原地打转的开发模式。Rat race game 是『富爸爸穷爸爸』中的经典例子 —— 老鼠在环形的笼子里拼命地奔跑。

如想了解更多, 请参见原文, 看看作者怎么分析每类人的, 你值得拥有。

好了, 来说说Android的Log打印的一些方法和技巧,为了简单起见,下文中AS就是Android Studio的缩写。

善用adb logcat

我看到有些测试人员为了,看程序的Log, 还特意装一个AS。有时候想问为什么不用adb logcat,难道是没有linux下的shell命令吗, 好吧, 被你的无邪打败了。

有时候我们要看一个Java层的奔溃,我仅仅需要下面命令

1
2
adb logcat | grep -i "system.err"

想看看别的,使用process输出格式

1
2
adb logcat -v process

AS 使用技巧

AS提供了很多的模板功能, 自己也可以根据情况自己定义:

template设置

自动填写Tag、方法名和返回值:

动态设置值

你在调试时会不也遇到这样的情况,为了进入不同分支,最笨的办法是每次都有修改一下条件变量的代码, 然后重新编译运行。现在我们可以利用debug的setValue(Mac F2)方法动态设置值, 下面代码 变量b 开始等于0, 正常情况下会进入catch条件; 现在我将它修改为2, 它就不会进入catch条件了。

打印

你可以用第三方库(loggerLogUtilstimber)或自己改造log框架, 让打印更美观。

Logger效果图

总结

一万个人心中有一万个丘比特,所有找到一个自己适合的打印方式。

希望大家使用愉快!

JasonThink wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!