日志规范

写在前面

该文章只考虑了5层日志级别,且适用于初步的日志规范,只解释了何时记录日志、日志应该记录哪些、需要注意的几个基本问题。如果需要了解最佳的日志实践/规范,推荐以下文章:
知乎,最佳日志实践
王健:最佳日志实践

日志的级别

  • ERROR
      ERROR是最高级别错误,反映系统发生了非常严重的故障,极有可能影响系统/程序的正常使用。
      对于这类错误,要求将错误的细节记录在日志中,方便后续人工回溯解决。

  • WARN
      WARN是低级别异常日志,反映系统在业务处理时触发了异常流程,但是这类错误并不影响系统/程序的正常使用。
      对于这类错误,同样要求将错误的细节记录在日志中。

  • INFO
      INFO日志主要记录系统关键信息,旨在保留系统正常工作期间关键运行指标。
      建议把初始化系统配置业务状态变化信息,或者用户业务流程中的核心处理记录到日志中,方便日常运维工作以及错误回溯时上下文场景复现。

  • DEBUG
      DEBUG日志主要用于开发阶段的调试帮助。
      建议记录起到调试作用的信息或者其他等级不方便显示的信息,包括参数信息调试细节信息返回值信息等等。

记录时机

总结几个需要写日志的点:

  1. 捕获到异常时。建议用ERROR或者WARN。
  2. 业务流程出错。常见的合适场景包括外部参数不正确,数据处理问题导致返回码不在合理范围内等等。建议用ERROR或者WARN。
  3. 系统核心角色,组件关键动作,建议记录INFO级别日志,如果日志频度高或者打印量特别大,可以提炼关键点INFO记录,其余酌情考虑DEBUG级别。
  4. 系统初始化。核心模块或者组件初始化过程中往往依赖一些关键配置,根据参数不同会提供不一样的服务。务必在这里记录INFO日志,打印出参数以及启动完成态服务表述。

日志内容

日志应当提供如下内容:

  • 时间,包含时区信息和毫秒,这个工作往往日志框架足以支持。核心属性之一。
  • 日志级别,例如 debug、info 以及warn、error
  • 会话标识,能知道是哪个客户端或者是哪个用户触发,登陆账号,session信息等
  • 功能标识,功能标识的意义在于方便日志搜索,跟踪指定功能的完整轨迹,是INFO,DEBUG日志的常见技巧。跟logger分类同一道理,更细分功能标识则是方法标识,更多使用在DEBUG做在线调试使用。
  • 精炼的内容,内容永远是日志的核心,结合上述使用场景,简单来说包括场景信息(谁,什么功能等),状态信息(开始,中断,结束)以及重要参数.
  • 其他信息,其他可能的有用信息包括:版本号,线程号等等。

注意事项

  • 务必推敲日志的记录级别。
  • 注意日志的可读性,不妨在写完代码review这条日志是否通顺,能否提供真正有意义的信息。
  • 日志输出是多线程公用的,如果有另外一个线程正在输出日志,上面的记录就会被打断,最终显示输出和预想的就会不一致。
  • 线上代码禁止出现各类print等

你可能感兴趣的:(日志规范)