Log最佳实践

Log的重要性

Log是理解程序,分析程序Bug的神兵利器。

在软件项目的各个阶段中,最能凸显Log作用的是BugFix阶段。测试人员在发现bug后首先要做的就是截取日志供开发来定位解决bug。其次是在编码并测试功能阶段,开发完成代码后会自己测试一下,看是否实现其功能,log写好就不怕程序出bug了。

最近两年我们的项目都有一个共同点是编译时间长,即使修改一行代码,编译也要15分钟。如此巨大的代价在BugFix阶段是很大的苦恼。常见的现象就是,测试给的log并不能有效定位问题,我们就需要重新打log,而由于经验和其他因素如其他人的代码,导致我们并不能一次就把log打好,重复工作就意味着大量的时间浪费。有的时候一天时间都是编译中度过的,加班便成了必须。所以我在显示器前贴了张便签,用来提醒自己要把log写好,写全面,以避免无意义的浪费。

不要奢望一次成功

很多朋友都坚信自己写的代码是完美的、无懈可击的,懒得去写log。不过现实总是很残酷的,在第一次测试代码时往往会出状况,为了定位问题,又得重头来写log,重新编译运行。

时间紧不是借口

对于软件项目,是永远也没有充足的时间可言的。不要让时间紧成为你不打log的借口。

所以在编码阶段就不要存在侥幸心理,还是踏踏实实的把log写好,那么如何做呢?且看下面来分解。

一、适当的位置放log

函数的入口和出口有时是需要关心的,这对理解程序的流向很有帮助。有些团队有着这样的约定,进入和离开函数时要打印log来证明你曾经来过。

条件分支一定要留下log。因为此时你的程序都是在做决策,每次选择都会带领你的程序走上不同的道路,为了追踪它的行动,在if..else和switch语句中放下log吧。

循环语句log要慎重。在循环频繁使用并且数组较大的情况下打印log会出现刷屏情况,造成阅读有用信息困难,如果不是特别重要的信息,此时就不要加log了。

如果你想知道函数参数和某个变量的值,那就在其后面加log吧,这样才是最及时的值。

二、Log目的要明确,Title要写清

每条Log都会有title有message,像Android中的log:

1.          long time = endTime - startTime;  

2.          Log.i("TimeTest""calculateProcessTime is "+time);  

Title通常是当前类名或其他有意义的名字,这样便于查找。而message就是log的主体,本log的作用是什么,它要显示哪个变量的值等都由你来控制,描述一定要简明扼要,让人一看就能明白,不浪费时间。

三、避免加log时引入错误

因为加log造成程序crash的事情时有发生,都是不小心惹的祸。很多项目中使用的打log工具都是自己写的,有些使用上不小心就会出现尴尬的事情。对那些严格区分变量类型的,比如%d、%s之类,一次笔误就让你后悔15分钟以上,所以要专注认真才行啊。

四、不要嫌log太多

勤快一些,有时候会得到大大的回报。多写几行,把可疑和不确定的地方都放上log,信息越丰富分析起来就越容易。这是的log是写给自己看的,所以要负起责任。

五、去掉多余log

上面的log有些肯定是多余的,如果程序运行稳定,那么就把没有用处的log去掉吧,多余且无用的信息就别留着了。但是关键信息一定要保留,因为它在后期肯定会发挥作用。

为你的程序写log就像给你的程序请了一名侦探,它会为你证明bug不是你的(或者相反)。只要在编程中用心,就没有查不出来的bug。愿我们不要让轻心大意把我们摔倒。

 

你可能感兴趣的:(Log最佳实践)