关于代码日志

在平时的工作中,我们总是把开发当做全部的工作,但开发仅是整个交付流程中的一个小部分。在前面说到,在开发中我们需要有单元测试为我们的代码质量保驾护航。但是当编写的代码在服务器上运行时,总是会出现意料之外的情况(如果你说你写的代码从来都不会发生问题,那就不用看了)。既然代码会出问题,那我们就需要快速定位问题——不然就准备卷铺盖走人吧。
在需要排查线上问题时,日志就起着至关重要的作用。我们可以通过完整的日志,快速地定位到问题并还原问题现场。
完善的日志不仅能够定位问题,还有助于统计 & 分析数据,分析用户行为。

日志的作用

  • 反映程序运行情况
  • 帮助开发者快速定位问题
  • 发现日志瓶颈
  • 结合日志分析工具使用(比如通过日志进行预警)
  • 。。。

对应的——如果没有日志,上面的这些情况我们都无法知晓。

日志分类

日志的分类有很多种,比如 Nginx 的默认日志分为 access.logerror.log
目前我的习惯是默认使用一个日志文件,当有特殊情况时,比如当需要记录定时任务的调度情况时,为定时任务单独记录日志。

目前我的分类只有两个:

  • 默认日志:记录运行日志
  • 特殊日志:每一类特殊情况记录一个日志,比如定时任务

一般来说,简单的系统可以将所有的日志输出到同一个日志文件中,毕竟日志量不会太大。而对于复杂的系统,不同类型的日志存储到不同的日志文件是合理的。

坏日志

  • 能够放入一条日志的,输出了多条日志
  • 为了调试方便而加入的 “临时” 日志
  • 请求出错时不能通过日志定位问题
  • 无法确定服务启动时配置是否正确加载
  • 无差别打印日志(比如打印了账号 & 密码等)
  • 在日志中存储了过多信息(比如作为文档存储工具,将用户每次保存的文档内容打印出来)

日志分级

如何定义日志的所属等级可以参考此文档

日志的常见分级有很多类,可能你使用的每个日志工具都有自己的定义。
我个人的习惯是4类:

  • debug:记录调试信息,方便调试时使用
  • info:记录非调试和跟踪的信息——主要记录系统运行的关键信息,保留系统正常工作期间的关键运行指标
  • warn:记录警告信息——低级别异常日志,反映系统在业务处理时触发了异常流程,系统可恢复工作
  • error:记录错误信息——反映系统发生了非常严重的故障,无法自动恢复到正常态工作

日志切割

系统在不断运行时,日志也会越来越大。为方便日志的管理,同时也为了更方便得查看日志,我们可以按照一定的规则来切割日志。一般来说,按天切割日志即可。

资料