其他分享
首页 > 其他分享> > 如何利用日志快速定位问题

如何利用日志快速定位问题

作者:互联网

如何利用日志快速定位问题

引言

一般来说软件系统或者软件组件都可以简单的划分为下面三部分:

为了方便定位问题,上面每一部分都需要覆盖"不多不少"的日志才行。一般来说,输入输出必须加入详细的日志,方便快速界定问题的所属,甚至重现问题;处理部分中关键动作、主要分支、重要入口、预期不会发生的情况,都必须加入详细的日志,方便定位问题;

 

日志是设计的产物

一方面由于日志的受众有不同的群体,生产工程师,测试工程师,技术支持,开发工程师等,故日志应该具有不同的抽象层次,"ECall is trigger"这句日志打印对生产工程师,测试工程师是友好的,他们完全明白发生了什么事情,"ECallSts = 0"这句日志恐怕只有开发工程师明白发生了什么事情。故我们应该在设计阶段就定义好高抽象度,而且目标受众是非开发工程师的日志,将这些日志作为设计的一个成果物。原因如下:

  1. 参与上流设计的工程师都是精英工程师,他们有能力定义足够抽象的日志;

  2. 设计阶段就应该考虑怎么验证我们的系统,日志作为验证设计的一种手段,就应该在设计阶段被考虑;

  3. 上流设计工程师通过预定义好最少日志,在项目后期也方便验证系统实现是否按照预期实现;

另一方面,软件中出现的错误我们可以分为两类,一类是设计阶段就预估到了的,还有一类是由于能力有限设计阶段没有预估到,设计阶段就预估到的错误我们需要设计相应的日志来覆盖。

总的来说,在设计阶段设计好接口类(输入&输出)日志 & 运行类日志(关键动作&主要分支&重要入口&预期不会发生的情况等)日志内容,在实现阶段不断完善调试类日志内容。需要强调的是,好的调试类日志,绝不是一遍就可以写好的,因此团队要重视日志优化这件事情,不要让日志的质量持续降低(当项目变大时,项目的代码也存在一样的问题,越写越乱)。

日志怎么设计

日志内容格式

实际项目中日志框架都会包含时间、进程ID、线程ID、级别、模块名等通用信息,但对日志内容却没有严格的限制。日志内容应该考虑可读性与全局唯一性,符合人的理解。

日志等级划分

一般来说,日志等级分为五种级别,从高到低分别是:FATAL,ERROR、WARN、INFO、DEBUG:

快速定位

如前面所说,系统或者组件一般可以分为三部分,输入->处理->输出。故在调查具体的bug时,我们需要能知道以下信息:

  1. 本软件系统/本软件组件输入输出是否正常;

  2. 如果输出不正常,到底是输入异常导致 OR 软件系统或者组件处理出错导致;

  3. 如果是系统或者组件内部出错,要能通过日志定位到具体原因。

  4. 鉴于bug很多都是时序混乱、数据非法等造成的,故需要通过日志快速知道问题发生时各组件交互时序,系统/组件输入数据是否非法等。

在以往的项目中经常遇到这个问题,几乎总有人会在问题发生时说,这个日志基本上没有什么用处/或者这个日志我不知道想要干什么,但是每个人似乎又不能说出具体日志应该怎么输出才对。 故能否像MISRC规范对代码提出一些硬性要求一样,对日志也制定一些最低要求

===================================================================================================================================

 

标签:输出,关键词,定位问题,打印,组件,日志,快速,强制
来源: https://www.cnblogs.com/yuzhenjin/p/14018728.html